2016-05-27 5 views
0

を使用して、別のノードの値に基づいてノードを選択しますxsltでsavetypeの内容を使用するノードこの例savetype=dexterityのXPath:私が選ぶだろうか</p> <p>[Iは、同様の質問を見てきましたが、私はこれに答える見つけどれも、実際にそれを読むことなく、重複をマークしていないしないでください] XSLT

例えば、私は、私はsavetype

サンプルファイルの値からXPATHステートメントを構築することができ、

<xsl:value-of select="/root/character/abilities/dexterity/bonus"/> 

の値が<xsl:choose>声明なしでこれを行うには、とにかくありたいです

<?xml version="1.0" encoding="iso-8859-1"?> 
<root version="3.1" release="7|CoreRPG:3"> 
    <character> 
    <abilities> 
     <charisma> 
      <bonus type="number">-1</bonus> 
     </charisma> 
     <constitution> 
      <bonus type="number">2</bonus> 
     </constitution> 
     <dexterity> 
      <bonus type="number">2</bonus> 
     </dexterity> 
    </abilities> 
    <powers> 
     <id-00005> 
      <actions> 
       <id-00001> 
       <savetype type="string">dexterity</savetype> 
       </id-00001> 
      </actions> 
     </id-00005> 
    </powers> 
    </character> 
</root> 

答えて

2

私はXPATH文のFを構築することができますROMの値を

はい。試してみてください:

<xsl:value-of select="/root/character/abilities/*[name()=//savetype]/bonus" /> 

別のオプションは、キーを使用することです。あなたのスタイルシートの最上位レベルのキーを定義します。

<xsl:key name="k" match="abilities/*" use="name()" /> 

その後、使用:

<xsl:value-of select="key('k', //savetype)/bonus" /> 
+0

あなたは '*'何のためにあるのか説明してもらえます - ほとんど私へのポインタの服従のように見えます。私は '[]'の部分が、savetypeの値が何であれ、ノードを作成していると推測しています。また、savetypeには '//'が必要ですか?申し訳ありません - 私はxsltの新機能です – Adrian

+0

@Adrian XPathのチュートリアルを頼んでいますが、これはコメントでは提供できません。簡単に言えば、 '*'は任意の要素を表すワイルドカードであり、 '[]'は*述語*を表し、 'savetype'要素を選択するためにパスを指定する必要があります。コンテキストは不明なので、私は絶対的なものを使用しました。 –

関連する問題

 関連する問題