这是我的xml文件 -
<?xml version="1.0" encoding="UTF-8"?>
<update-all-attributes>
<document name="http:blah">
<price>115.00 USD</price>
<brand_qty>10 A</brand_qty>
<style_size>10 A_new in stock</style_size>
</document>
</update-all-attributes>
现在我想要2个新字段 - discounted_price比价格低10%,increase_price比价格高10%,并且还使用XSLT 1.0剥离brand_qty和style_size值之间的额外空格,所以我的xml用xslt修改之后应该看起来像这样 -
<?xml version="1.0" encoding="UTF-8"?>
<update-all-attributes>
<document name="http:blah">
<price>115.00 USD</price>
<discounted_price>103.50 USD</discounted_price>
<increased_price>126.50 USD</increased_price>
<brand_qty>10A</brand_qty>
<style_size>10A_newinstock</style_size>
</document>
</update-all-attributes>
答案 0 :(得分:0)
这是一种可能的方式:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" 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">
<xsl:variable name="price" select="number(substring-before(., ' '))"/>
<xsl:variable name="margin" select="$price*0.1"/>
<xsl:variable name="currency" select="substring-after(., ' ')"/>
<xsl:copy>
<xsl:value-of select="."/>
</xsl:copy>
<discounted_price>
<xsl:value-of select="format-number($price - $margin, '###,###.00')"/>
<xsl:value-of select="concat(' ', $currency)"/>
</discounted_price>
<increased_price>
<xsl:value-of select="format-number($price + $margin, '###,###.00')"/>
<xsl:value-of select="concat(' ', $currency)"/>
</increased_price>
</xsl:template>
</xsl:stylesheet>
<强> Demo
强>
答案 1 :(得分:0)
首先从identity transform开始。这将按原样复制所有节点。
然后覆盖您需要修改的节点的身份转换;在这种情况下是document
元素。
示例...
XML输入
<update-all-attributes>
<document name="http:blah">
<price>115.00 USD</price>
</document>
</update-all-attributes>
XSLT 1.0
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="document">
<xsl:variable name="price" select="substring-before(normalize-space(price),' ')"/>
<xsl:variable name="currency" select="substring-after(normalize-space(price),' ')"/>
<xsl:variable name="difference" select="number($price) * .10"/>
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
<discounted_price><xsl:value-of select="concat(format-number($price - $difference,'#,###.00'),' ',$currency)"/></discounted_price>
<increased_price><xsl:value-of select="concat(format-number($price + $difference,'#,###.00'),' ',$currency)"/></increased_price>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
XML输出
<update-all-attributes>
<document name="http:blah">
<price>115.00 USD</price>
<discounted_price>103.50 USD</discounted_price>
<increased_price>126.50 USD</increased_price>
</document>
</update-all-attributes>