Ответ 1
Просто удалите косую черту после Data
и добавьте корень:
<xsl:variable name="myVarA" select="/root/DataSet/Data[@Value1='2']/@Value2"/>
это структура моего исходного 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 к чему-либо A2 и myVar2 с чем угодно A5
Мой афиш выглядит следующим образом
<xsl:variable name="myVarA" select="/DataSet/Data/[@Value1='2']/@Value2" />
но, конечно, не работает, поскольку Value2 не является дочерним элементом Value1.
спасибо за любые подсказки заранее!
Просто удалите косую черту после Data
и добавьте корень:
<xsl:variable name="myVarA" select="/root/DataSet/Data[@Value1='2']/@Value2"/>
У вас есть две проблемы с вашим xpath - сначала вам нужно удалить дочерний селектор после Data
, как упомянуто выше, в phihag. Также вы забыли включить root
в свой xpath. Вот что вы хотите сделать:
select="/root/DataSet/Data[@Value1='2']/@Value2"
Примечание: использование//в начале xpath немного интенсивно CPU - он будет искать каждый node для соответствия. Использование более конкретного пути, например /root/DataSet, создаст более быстрый запрос.
Попробуйте это
xsl:variable name="myVarA" select="//DataSet/Data[@Value1='2']/@Value2" />
"//" будет искать DataSet на любой глубине
Я бы сделал это, создав переменную, которая указывает на узлы, которые имеют правильное значение в Value1, а затем ссылаются на t
<xsl:variable name="myVarANode" select="root//DataSet/Data[@Value1='2']" />
<xsl:value-of select="$myVarANode/@Value2"/>
Все остальные ответы тоже правильны - на самом деле, на самом деле, так как я не заметил дополнительной косой черты в вашем XPATH, который бы повредил вещи. Тем не менее, это также будет работать и может работать для разных вещей, поэтому сохраните этот метод в своем инструменте.