私の仕事は、すべてのノード ラベルを表示する必要があることです。表示する前に、それらのノード/ラベルが /Datum/DCR/Global/* にあるかどうかを確認する必要があります。存在する場合は、グローバル要素の値を表示します。子またはそうでなければ、私の例のノード要素ラベルから表示したいノード/ラベル「ホーム」はグローバル要素の子ノードにないため、/結果/サイトマップ/セグメント/ノード[1]/ラベルから表示し、 「インベントリ」はグローバル要素の子ノードにあるため、/Datum/DCR/Global/Inventory からインベントリを表示する必要があります。
XML ファイル:-
<Properties>
<Data>
<Datum ID="D01" Type="DCR" Name="Global">
<DCR Category="BAT" Type="global">
<Global>
<FindaDealer>Find a Dealer</FindaDealer>
<Tools>Tools</Tools>
<Inventory>Inventory</Inventory>
<ContactDealers>Contact Dealers</ContactDealers>
</Global>
</DCR>
</Datum>
<Result>
<site-map id="hnh1clwg" >
<segment id="0" >
<node id="hnhi" >
<label key="">home</label>
</node>
<node id="hn4h">
<label key="">Offers</label>
</node>
<node id="hn4l">
<label key="">Tools</label>
</node>
<node id="hn62">
<label key="">Inventory</label>
</node>
</segment>
</site-map>
</Result>
</Data>
</properties>
XSL コード:-
<xsl:element name="ul">
<xsl:for-each select="Properties/Data/Result/site-map/segment/node">
<li>
<a href="#">
<xsl:apply-templates select="/Properties/Data/Datum[@Name='Global']/DCR/Global/*">
<xsl:with-param name="nodelabel" select="label"/>
</xsl:apply-templates>
</a>
</li>
</xsl:for-each>
</xsl:element>
<xsl:template name="Glossary" match="/Properties/Data/Datum[@Name='Global']/DCR/Global/*">
<xsl:param name="nodelabel"/>
<xsl:variable name="name" select="name(.)"/>
<xsl:variable name="value" select="."/>
<xsl:if test="($nodelabel = $value)">
<xsl:text>From Global element : </xsl:text>
</xsl:if>
<xsl:if test="not($nodelabel = $value) and position()=last()">
<xsl:text>From Sitemap : </xsl:text>
</xsl:if>
</xsl:template>
私が得ている出力: -
From Sitemap :
From Sitemap :
From Global element : From Sitemap :
From Global element : From Sitemap :
望ましい出力:-
From Sitemap :
From Sitemap :
From Global element :
From Global element :
どんなポインタも役に立ちます。
ありがとう