XSLT- 根据特定元素的值将值从父元素复制到子元素

  • 本文关键字:元素 复制 XSLT- xslt-1.0 xslt-2.0
  • 更新时间 :
  • 英文 :


根据下面的输入xml,如果订单项在父级别属于"桌面"类型,则更新所有子订单项的价格与父价格相同。 订单项是递归的,里面可以有 1-n 个订单项。为了简单性,我考虑了 3 个孩子和 1 个父订单项。 我还有另一个涉及依赖的问题,即如果父级有一个对象 ID 并且它与子对象的 objectid 匹配,那么更新价格。但是,一旦这个问题得到解决,我会作为一个新问题提出。谢谢。

<listoforders>
<Orderitem>
<name>Desktop</name>
<place>NZ</place>
<price>120</price>
<Orderitem>
<name>Desktop2</name>
<place>NZ</place>
<price>130</price>
</Orderitem>
<Orderitem>
<name>Desktop3</name>
<place>NZ</place>
<price>130</price>
</Orderitem>
</Orderitem>
</listoforders> 

结果:

<listoforders>
<Orderitem>
<name>Desktop</name>
<place>NZ</place>
<price>120</price>
<Orderitem>
<name>Desktop2</name>
<place>NZ</place>
<price>120</price>
</Orderitem>
<Orderitem>
<name>Desktop3</name>
<place>NZ</place>
<price>120</price>
</Orderitem>
</Orderitem>
</listoforders>      

看起来很简单,但我无法通过身份规则做到这一点。我需要在这里使用每个吗?

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="orderitem[name='Desktop']/price">
<xsl:variable name="temp" select="*[(self::price)]"/>
<xsl:copy>
<xsl:value-of select=$temp </xsl:value-of>
<xsl:apply-templates select="*[(child::price)]"/> 
</xsl:copy>    
</xsl:template>
</xsl:stylesheet>

提前谢谢。

问候 克里什

怎么样:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="price[../../name='Desktop']">
<xsl:copy-of select="../../price"/>         
</xsl:template>
</xsl:stylesheet>

相关内容

  • 没有找到相关文章

最新更新