0

同様の子要素を持つ複数の同様の要素を持つxmlファイルがあります。例えば

<root>
    <elem>
        <condition>A</condition>
        <value>111</value>
    </elem>
    <elem>
       <condition>B</condition>
        <value>555</value>
    </elem>
    <elem>
        <condition>A</condition>
        <value>222</value>
    </elem>
</root>

これらの要素の 1 つに、xsl で抽出する必要がある値が含まれています。値は、要素の子ノードの別の要素に記述された条件によって識別される必要があります。条件が「B」で、その要素の値「555」が必要だとしましょう。

私が使用するxmlエディターXPathで正しい値を取得する方法を知っています(Rinzo - Eclipse)=>

/root/elem[condition='B']/value

しかし、xslで値を取得しようとすると、(任意の)値を取得できません=>

<xsl:value-of select="/root/elem[condition='B']/value"/>

xsl の値は単一の要素になるため、for-each ループは使用できません。元の xml の形式が正しくありませんが、私はそれを助けることはできません。

問題は、xsl:value-of を使用して、xsl ファイルでその値を取得するにはどうすればよいかということです。

4

1 に答える 1

1

XML または XSL の残りの部分は表示されませんが、value-of ステートメントは示されているように機能します。

<xsl:template match="/">
  <xsl:value-of select="/root/elem[condition='B']/value"/>
</xsl:template>

それは機能して戻ります: 555

Flynn1179 が指摘しているように、コメントで、XML にはおそらくデフォルトの名前空間が含まれており、XPATH では考慮されていません。

名前空間をインラインで XPATH に追加してみてください ( http://yournamespace-here.example.comを実際の URL に置き換えます)。

/*[namespace-uri()='http://yournamespace-here.example.com' and local-name()='root']/*[namespace-uri()='http://yournamespace-here.example.com' and local-name()='elem'][condition='B']/*[namespace-uri()='http://yournamespace-here.example.com' and local-name()='value']

または、XSL で接頭辞を付けることによって

xmlns:myPrefix="http://yournamespace-here.example.com" 

それをXPATHに追加します

/myPrefix:root/myPrefix:elem[condition='B']/myPrefix:value
于 2012-10-29T14:35:10.307 に答える