0
根據以下輸入xml,如果orderitem在父級別爲「desktop」類型,則更新與父級價格相同的所有子訂單項目的價格。 orderitem是遞歸的,可以有1-n個訂單項。爲了簡單起見,我考慮了3個孩子和1個父母orderitem。 我有另一個涉及依賴的問題,即如果父母有一個objectid並且它與孩子的objectid匹配,然後更新價格。但是,一旦解決,我會問一個新的問題。謝謝。XSLT-根據特定元素的值從父項到子項複製值
<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>
很簡單,但是我不能夠通過身份規則來做到這一點。我需要在這裏使用for-each嗎?
<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>
在此先感謝。
問候 Krish
感謝邁克爾,你能好心幫助我理解這一點吧。我的理解是,我們與價格元素相匹配,其名稱爲'桌面'兩代以上,然後通過選擇父級價格來複制價格。我對它的工作原理感到困惑。謝謝。 – Krish
我們正在匹配'Price',其祖父母的名字是「Desktop」,然後複製祖父母的價格。這與改變其父母名稱爲「桌面」的「Orderitem」的價格相同。我們只想改變價格,所以要做的就是直接匹配它,而不是它的父母。 –
那麼它如何將價格應用於其子元素(而不是另一個orderitem中的價格)。它是隱含的嗎?它不一定是祖父母,也可以是父母。 – Krish