如果Orderitem
- > name
为“桌面”,则从price
value
listofspareparts
复制name
spareparts1
<listoforders>
<Orderitem>
<name>Desktop</name>
<place>NZ</place>
<price>120</price>
<listofspareparts>
<spareparts1>
<name>spare1</name>
<value>140</value>
</spareparts1>
<spareparts1>
<name>spare2</name>
<value>130</value>
</spareparts1>
</listofspareparts>
</orderitem>
</listoforders>
中的备用2'。
输入:
<listoforders>
<Orderitem>
<name>Desktop</name>
<place>NZ</place>
<price>130</price>
<listofspareparts>
<spareparts1>
<name>spare1</name>
<value>140</value>
</spareparts1>
<spareparts1>
<name>spare2</name>
<value>130</value>
</spareparts1>
</listofspareparts>
</orderitem>
</listoforders>
输出应为:
<xsl:stylesheet version="1.0" xmlns:xsl="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="price[../Orderitem[name='Desktop']">
<xsl:copy-of select="value[../../listofspareparts/spareparts1[name='spare2']]" />
</xsl:template>
</xsl:stylesheet>
XSLT-1.0:
{{1}}
请告诉我这里缺少的东西。
答案 0 :(得分:1)
首先,由于<Orderitem>
与</orderitem>
不一致,您的XML格式不正确。所以我选择命名这个元素<Orderitem>
。
你的XPath非常接近,只需要微调一下。看看差异吧。您需要始终考虑相对于事物发展的当前节点 - 这被称为轴。
轴定义相对于当前节点的节点集。
<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="price[../name='Desktop']">
<price>
<xsl:value-of select="../listofspareparts/spareparts1[name='spare2']/value" />
</price>
</xsl:template>
</xsl:stylesheet>
输出符合要求。