:
要素が結果的に受注していなかった場合は何?あなたは要素のIDを取得するためにtranslate()
を使用して、concat()
を使用して構築された正しい名前で対応する要素を検索することができます(XSLT 1.0と仮定)。この場合
。私は最終的には、現在のfirstname
の前の要素をキャッチすることを確認する(parent::
の略)../
にfollowing-sibling::
軸を変更します。
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="customers">
<MyCustomers>
<xsl:apply-templates select="*[starts-with(name(),'firstname')]"/>
</MyCustomers>
</xsl:template>
<xsl:template match="*[starts-with(name(),'firstname')]">
<xsl:variable name="id" select="translate(name(),'firstname','')"/>
<Customer>
<Name><xsl:value-of select="concat(.,' ',
../*[name()=concat('lastname',$id)])"/></Name>
<Sex><xsl:value-of select="../*[name()=concat('sex',$id)]"/></Sex>
</Customer>
</xsl:template>
</xsl:stylesheet>
廃止された解答の質問に示すように、微細加工XSLT 1.0変換を、固定された入力文書の構造を仮定し
は次のとおりです。
リトル
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="customers">
<MyCustomers>
<xsl:apply-templates select="*[starts-with(name(),'firstname')]"/>
</MyCustomers>
</xsl:template>
<xsl:template match="*[starts-with(name(),'firstname')]">
<Customer>
<Name><xsl:value-of select="concat(.,' ',
following-sibling::*[1]
[starts-with(name(),'lastname')])"/></Name>
<Sex><xsl:value-of select="following-sibling::*[2]
[starts-with(name(),'sex')]"/></Sex>
</Customer>
</xsl:template>
</xsl:stylesheet>
説明
あなたはあなたのためのXML入力のタグの悲しい名前のXPath 1.0の機能starts-with()
を必要としています。 following-sibling::
軸を使用して、名前がfirstname
で始まる任意の要素の必須の次の兄弟タグを取得できます。
「コード」のマークアップを使用して投稿を書き留めてください。 –
良い質問、+1。 XSLT 1.0を使用する最も一般的で柔軟なソリューションについては、私の答えをご覧ください。一番上の要素の子が任意の方法で再シャッフルされても、望みの結果が得られます。 :) –
また、説明が追加されました。 –