Как разобрать XML с помощью XSLT?

У меня есть XML с данными следующим образом

<Item1>
  <item2>
    <Item3>111</Item3>
  <Item2>
</Item11>

Чтобы получить значение 111 в Item3

<xsl:choose>
  <xsl:value-of select="Item1/Item2/Item3"/>
</xsl:choose>

В XSLT. Теперь мне нужно получить следующее:

<Product1>
  <Product2>
    <Product3 ValidYN="Y" ProducType="ABC">333</Product3>
    <Product3 ValidYN="Y" ProducType="DEF">444</Product3>
    <Product3 ValidYN="Y" ProducType="GHI">555</Product3>
  <Product12>
</Product1>

Мне нужно взять значения 333 , 444 , 555 на основе ProducType. Как сделать то же самое с помощью XSLT


person dany    schedule 21.03.2013    source источник
comment
Что вы имеете в виду, когда говорите взять эти значения на основе ProducType? Как должен выглядеть результат XSLT?   -  person JLRishe    schedule 21.03.2013
comment
Используя первый пример, я смог достичь значения 111. Теперь мне нужно получить значения 333 444 555, но теги xml аналогичны для тех, кроме ** ProducType = ABC, ProducType = DEF, ProducType = GHI ** .Каким будет код для достижения этих значений, аналогичный <xsl:value-of select="Item1/Item2/Item3"/>   -  person dany    schedule 21.03.2013


Ответы (1)


Чтобы выбрать узел на основе значений по отношению к нему, вы можете использовать XPath следующим образом:

/Product1/Product2/Product3[@ValidYN = 'Y' and @ProductType = 'ABC']
/Product1/Product2/Product3[@ValidYN = 'Y' and @ProductType = 'DEF']
/Product1/Product2/Product3[@ValidYN = 'Y' and @ProductType = 'GHI']

части в [квадратных скобках] называются «предикатами».

person JLRishe    schedule 21.03.2013
comment
Если нужно проверить этот ValidYN="Y"' also along with ProducType=ABC`, то?? - person dany; 21.03.2013
comment
Пожалуйста, смотрите мой измененный ответ. - person JLRishe; 21.03.2013