根据下面的输入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>