26

これは私のソースxmlの構造です:

<root>
<DataSet Value="A">
<Data Value1="1" Value2="anythingA1" />
<Data Value1="2" Value2="anythingA2" />
<Data Value1="3" Value2="anythingA3" />
<Data Value1="4" Value2="anythingA4" />
<Data Value1="5" Value2="anythingA5" />
</DataSet>
</root>

ここから、いくつかの変数を作成したいと思います。たとえば、Value1="2" のすべてと Value1="5" のすべてから、myVar1 が anyA2 になり、myVar2 が anyA5 になるはずです。

私のアプローチは次のようになります

<xsl:variable name="myVarA" select="/DataSet/Data/[@Value1='2']/@Value2" />

もちろん、Value2 は Value1 の子ではないため、機能しません。

事前にヒントをありがとう!

4

5 に答える 5

48

後ろのスラッシュを削除してData、ルートを先頭に追加します。

<xsl:variable name="myVarA" select="/root/DataSet/Data[@Value1='2']/@Value2"/>
于 2009-02-12T14:08:10.017 に答える
4

Dataxpath には 2 つの問題があります。まず、前述の phihag のように子セレクターを削除する必要があります。rootまた、xpathに含めるのを忘れていました。やりたいことは次のとおりです。

select="/root/DataSet/Data[@Value1='2']/@Value2"
于 2009-02-12T14:12:50.020 に答える
1

これを試して

xsl:variable name="myVarA" select="//DataSet/Data[@Value1='2']/@Value2" />

「//」は任意の深さで DataSet を検索します

于 2009-02-12T14:16:18.390 に答える
1

注: xpath の先頭で // を使用すると、CPU に負荷がかかります。すべてのノードで一致するものが検索されます。/root/DataSet などのより具体的なパスを使用すると、より高速なクエリが作成されます。

于 2009-02-12T14:46:54.387 に答える
0

Value1 に適切な値を持つノードを指す変数を作成し、t を参照することでそれを行います

<xsl:variable name="myVarANode" select="root//DataSet/Data[@Value1='2']" />
<xsl:value-of select="$myVarANode/@Value2"/>

他のすべての人の答えも正しいです-実際には、XPATHに余分なスラッシュがあり、混乱を招くことに気付かなかったので、より正しいです。それでも、これも機能し、さまざまな場合に機能する可能性があるため、この方法をツールボックスに保管してください.

于 2009-02-12T14:35:09.297 に答える