OK、これを説明するのはかなり難しいですが、ある一連のノードの現在の要素が別の一連のノードの他の要素と一致するかどうかに基づいて値を設定する必要があります。おそらくよりよく説明されているので、ここに私が求めているものの大まかな例を示します。次のようなxmlがあるとします
<Person>
<name>John Smith</name>
<id>25</age>
....
</Person>
<Person>
<name>Smith, Will</name>
<id>22</age>
....
</Person>
and so on and so on
<name>
<given>Smith, Will</given>
<alternate>Will Smith</alternate>
</name>
<name>
<given>BobbyJ.</given>
<alternate>Bobby Johnson</alternate>
</name>
and so on and so on.
私が必要とするのは、人物の名前、すなわちスミス、ウィルが名前の指定された要素のいずれかに表示され、値を代替要素として設定するか、それ以外の場合は人物の名前として設定することです。たとえば、私の例は印刷されます
John Smith
Will Smith
結果として。
うまくいけば、これは XSLT で、できればバージョン 1.0 で行うことができます。これは、値が正しい形式であることを確認するために、値の書き間違いに対する保護手段であるためです。これは、私が使用している例ではないことに注意してください。私が継承した混乱したコードを使用すると、これは基本的に私が必要とするものを示し、できれば他の人にそれを明確にする関連する例になるはずです. 役立つ場合に使用している XSL の例は次のとおりです。
<xsl:template match="Person">
<xsl:variable name="person" select="."/>
<div class="...">
<div class="...">
<xsl:value-of select="id"/>
<xsl:for-each select="//name">
<xsl:choose>
<xsl:when test="given = $person/name">
<xsl:value-of select="alternate"/>
</xsl:when>
</xsl:choose>
</xsl:for-each>
alternate
必要に応じて名前が表示されますが、名前は表示されませんgiven
。要素に含まname
れていない場合は、値を指定する必要があります。name