同じレベルと特定の順序で同じ名前のノードの問題に直面しています。私の注文は、それらのノードの値によって異なります。私の出力はtxtファイルでなければなりません。私のXMLは次のようになります:
<?xml version="1.0" encoding="UTF-8"?>
<header>
<B>
<element>
<value>10</value>
<value>test</value>
</element>
</B>
<A>
<element>
<value>100</value>
<value>message</value>
</element>
</A>
<B>
<element>
<value>20</value>
<value>phase</value>
</element>
</B>
<A>
<element>
<value>101</value>
<value>type</value>
</element>
</A>
<B>
<element>
<value>20</value>
<value>phase</value>
</element>
</B>
<A>
<element>
<value>101</value>
<value>type</value>
</element>
</A>
</header>
私のtxt出力はそのように見えるはずです。
タイプフェーズ タイプフェーズ
等々。
私のXSLはそのように見えます
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="text" indent="yes" />
<xsl:template match="header/*">
<xsl:if test="name(.) = 'A' and element/value='101'">
<xsl:value-of select="element/value[position()=2]" />
</xsl:if>
<xsl:if test="name(.) = 'B' and element/value='20'">
<xsl:value-of select="element/value[position()=2]" />
</xsl:if>
<xsl:text>
</xsl:text>
</xsl:template>
<xsl:template match="/">
<xsl:apply-templates select="header/*"></xsl:apply-templates>
</xsl:template>
この XSL の結果は次のとおりです。
フェーズ タイプ フェーズ タイプ
元の入力 XML にはさらに多くのノードがあるため、xsl:sort 降順は役に立ちません。入力 XML ドキュメントからではなく、XSL からの注文が必要です。これを解決する方法を知っている人はいますか?