xslt - 剥去标记值中的空格

时间:2015-07-30 05:57:36

标签: xml xslt

这是我的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>

1 个答案:

答案 0 :(得分:0)

要从brand_qtystyle_size元素中删除空格,请在样式表中添加另一个模板(第一个模板,而不是您编写的模板):

<xsl:template match="brand_qty | style_size">
    <xsl:copy>
        <xsl:value-of select="translate(., ' ', '')"/>
    </xsl:copy>
</xsl:template>

这假设您还希望添加的discounted_priceincreased_price出现在您的输出中 - 与您发布的输出不同。