Изменение значения некоторых элементов с помощью xslt

The input xml structure is like this:



 <envelopes>
 <env:envelope>
 <urn:myfunction>
 <parameter1 attr1="df">fdad</parameter1>
 <parameter2 attr2="ww">dfsa</parameter2>
 <productdata>
 
 
 <price><price>
 </price></price></productdata>
 </urn:myfunction>
 </env:envelope>

 <env:envelope>
 <urn:myfunction1>
 <parameter1 attr1="df">fdad</parameter1>
 <parameter2 attr2="ww">dfsa</parameter2>
 <productdata>
 
 
 <price><price>
 </price></price></productdata>
 
 </urn:myfunction1></env:envelope>

 <env:envelope>
 <urn:myfunction1>
 <parameter1 attr1="df">fdad</parameter1>
 <parameter2 attr2="ww">dfsa</parameter2>
 <productdata>
 
 
 <price><price>
 </price></price></productdata>
 
 </urn:myfunction1></env:envelope>
 </envelopes>

В моем xsl я делаю следующее:

<xsl:template match="/">
 <newenvelopes>
 <xsl:for-each select="//productData">
 <xsl:copy>
 </xsl:copy>
</xsl:for-each></newenvelopes>
</xsl:template>

<xsl:template match="productData/Description">
<description>new Description</description>
</xsl:template>

Я намерен сохранить остальные элементы и атрибуты productData одинаковыми, но модифицировать некоторые из них. Но полученный xml дает элемент description с новым значением, но только text nodes для остальных элементов. Как я могу получить все остальные узлы productData?

1 ответ

Вам нужен шаблон идентификации, который скопирует входной контент. Попробуйте добавить это в свой XSLT:

<xsl:template match="@* | node()">
 <xsl:copy>
 <xsl:apply-templates select="@* | node()">
 </xsl:apply-templates></xsl:copy>
</xsl:template>

licensed under cc by-sa 3.0 with attribution.