さまざまな階層から ID を抽出して一覧表示する必要があるという要件があります。以下は XML のサンプルです: (顔色を反映するために 3 レベルの階層を用意しました)
入力 XML:
<Wrapper>
    <A Id="A@1">
        <B Id="B#1">
            <C Id="C$1"/>
            <C Id="C$2"/>
        </B>
        <B Id="B#2">
            <C Id="C$3"/>
            <C Id="C$4"/>
        </B>
        <B Id="B#3">
            <C Id="C$5"/>
            <C Id="C$6"/>
        </B>
        <B Id="B#4>
            <C Id="C$7"/>
            <C Id="C$8"/>
        </B>
    </A>
</Wrapper>
望ましい出力:
A Ids:
A@1
B Ids:
B#1
B#2
B#3
B#4
C Ids:
C$1
C$2
C$3
C$4
C$5
C$6
C$7
C$8
入力 XSL:原理は単純です: ルート要素 "\" に遭遇し、テキストを書き込み、階層ごとに絶対 XPath とアクセス ID を提供します。コードは次のとおりです。
<?xml version ="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="text"/>
  <xsl:variable name="linefeed" select="'
'"/>  
  <xsl:template match="/">
    <!--List of A Ids-->
      <xsl:text>A Ids:</xsl:text>
      <xsl:value-of select="$linefeed"/>
      <xsl:for-each select="/Wrapper/A/@Id">
        <xsl:value-of select="concat(.,$linefeed)"/>
      </xsl:for-each>
      <xsl:value-of select="$linefeed"/>
    <!--List of B Ids-->
      <xsl:text>B Ids:</xsl:text>
      <xsl:value-of select="$linefeed"/>
      <xsl:for-each select="/Wrapper/A/B/@Id">
        <xsl:value-of select="concat(.,$linefeed)"/>
      </xsl:for-each>
      <xsl:value-of select="$linefeed"/>
    <!--List of C Ids-->
      <xsl:text>C Ids:</xsl:text>
      <xsl:value-of select="$linefeed"/>
      <xsl:for-each select="/Wrapper/A/B/C/@Id">
        <xsl:value-of select="concat(.,$linefeed)"/>
      </xsl:for-each>
      <xsl:value-of select="$linefeed"/>
  </xsl:template>
 </xsl:stylesheet>
もっと良い方法はありますか??