这是我的xml文件 -
<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>
如何在值中删除空格,以便在使用xslt 1.0修改后我的xml应如下所示:
<update-all-attributes>
<document name="http:blah">
<price>115.00 USD</price>
<brand_qty>10A</brand_qty>
<style_size>10A_newinstock</style_size>
</document>
</update-all-attributes>
这是另一个有用的编码器提供的XSLT -
<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>
这是我尝试过但未能成功的XSLT -
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="update-all-attributes">
<xsl:for-each select="document">
<size_availability>
<xsl:call-template name="strip_spaces">
<xsl:with-param name="value" select="size_availability" />
</xsl:call-template>
</size_availability>
<size_InStk>
<xsl:call-template name="strip_spaces">
<xsl:with-param name="value" select="size_InStk" />
</xsl:call-template>
</size_InStk>
</xsl:for-each>
</xsl:template>
<xsl:template name="strip_spaces">
<xsl:param name="value" />
<xsl:choose>
<xsl:when test="not(contains($value, ' '))">
<xsl:value-of select="$value" />
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="strip_spaces">
<xsl:with-param name="value"
select="concat(substring-before($value, ' '), substring-after($value, ' '))" />
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:0)
要从brand_qty
和style_size
元素中删除空格,请在样式表中添加另一个模板(第一个模板,而不是您编写的模板):
<xsl:template match="brand_qty | style_size">
<xsl:copy>
<xsl:value-of select="translate(., ' ', '')"/>
</xsl:copy>
</xsl:template>
这假设您还希望添加的discounted_price
和increased_price
出现在您的输出中 - 与您发布的输出不同。