web-dev-qa-db-ja.com

XSLでの親ノード属性の取得

私のXMLでは、次のようになっています。

<a>
  <b>
    <c something="false">
      <d>
        <e>
          <f>someResult</f>
        </e>
      </d>
    </c>
  </b>
</a>

ループ内のXSLで、次のことができます。

<xsl:value-of select="f"></xsl:value-of>

しかし、どうすればcの属性を取得できますか?

私は以下をやってみました

<xsl:value-of select="////@something"></xsl:value-of>

親を試すだけでなく、何もうまくいっていないようです。このような親ノードを取得できますか?

また、私はただ行うことはできません:

<xsl:value-of select="/a/b/c/@something"></xsl:value-of>

Cの倍数が存在する可能性があるため。

19
ingh.am

ツリーを上に移動するには、レベルごとに「..」を使用します。つまり、このインスタンスではおそらく

select="../../../@something"

名前で祖先ノードを選択することもできます(およそ)

select="ancestor::c[1]/@something"  

さらなる例については http://www.stackoverflow.com/questions/3672992 を参照してください

37
kaj

使用

ancestor::c[1]/@something

これにより、somethingという名前の最初の(現在のノードから上に向かって)祖先のcという名前の属性が選択されます。

11