目前我有一个棘手的XSL问题。 我需要复制现有的XML,复制某个元素(加上它的子元素)并修改两个子元素的值。 修改是:将'value'元素的值除以110,并将'type'元素的值从'normal'编辑为'discount'。
这是我目前所拥有的:
当前XML:
<dataset>
<data>
<prices>
<price>
<value>50.00</value>
<type>normal</type>
</price>
</prices>
</data>
</dataset>
预期结果
<dataset>
<data>
<prices>
<price>
<value>50.00</value>
<type>normal</type>
</price>
<price>
<value>45.00</value>
<type>discount</type>
</price>
</prices>
</data>
</dataset>
任何接受者? 我已经使用copy-of复制了所需的'price'元素,但是我不知道如何修改它。
答案 0 :(得分:1)
您的规格有点偏差 - 您的值是乘以.9而不是除以110的结果。以下假设您想要以“正常”价格编辑所有内容 - 更改模板匹配模式特定节点或节点集。
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml"/>
<xsl:template match="/dataset/data/prices/price[type='normal']">
<xsl:apply-templates/>
<xsl:copy>
<value><xsl:value-of select="format-number(value * 0.9, '0.00')"/></value>
<type>discount</type>
</xsl:copy>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:0)
假设您有一个与价格匹配的模板,您只需要添加您正在谈论的逻辑:
<xsl:template match="price">
<!-- xsl:copy or xsl:copy-of depending on how you did it -->
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
<price>
<value>
<xsl:value-of select="value * 0.9"/>
</value>
<type>discount</type>
</price>
</xsl:template>
我猜你的操作实际上是“乘以.9”而不是“除以110”,因为45不等于50除以110(也不是45等于50除以1.10)。