Как получить оцененное значение из переменной xslt

Я выполняю преобразование XML с помощью XSLT. Сценарий, в котором я застрял, заключается в том, что у меня много родительских элементов и дочерний элемент с тем же именем «OtherDetails» во всех родительских элементах. Итак, я повторяю родительский элемент, чтобы получить значение дочернего элемента OtherDetails. Итак, я пробую этот способ.

<xsl:if test".='Z'">
<xsl:variable name="parent" select="concat(name(..),'/OtherDetails')"/>
<xsl:value-of select="$parent" />
</xsl:if>

Когда я пробую, я получаю объединенную строку $ parent переменной, но мне нужно получить значение XPath $ parent переменной.

Мне нужно получить значения OtherDetails, когда значение элемента «Другое» равно «Z». Пример XML:

<structure>
<Other/>
<OtherDetails>Value1</OtherDetails>
</structure>
<power>
<Other>Z</Other>
<OtherDetails>Value2</OtherDetails>
</power>
<restrict>
<Other>Z</Other>
<OtherDetails>Value3</OtherDetails>
</restrict>

Как вы думаете, почему вам нужно создавать выражение пути во время выполнения, почему вы думаете, что вам нужно «повторять», почему вы просто не можете использовать *[Other = 'Z']/OtherDetails?

Martin Honnen 10.09.2018 10:13
0
1
140
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я думаю, что тебе нужно сделать вот что ...

<xsl:variable name="parent" select="../OtherDetails"/>

Это предполагает, что вы находитесь на узле Other и хотите, чтобы OtherDetails находился под тем же родителем.

Обратите внимание, вы также можете сделать это, но это будет работать только в том случае, если OtherDetails всегда следует за Other.

<xsl:variable name="parent" select="following-sibling::OtherDetails"/>

Также обратите внимание, что переменные являются локальными по своему объему. В вашем конкретном примере вы не сможете использовать $parent вне xsl:if.

Вы правы, просто добавив ".." до того, как другие детали дадут результат. Спасибо Тим

Mohan 10.09.2018 10:24

Другие вопросы по теме