如何使用XSLT

时间:2016-08-09 09:59:18

标签: xml xslt

我正在尝试将XML元素的值转换为其他格式,例如KG到LBS。 假设我有一个XML

<all>
    <one>Something 1</one>
    <two>something 2</two>
    <check>
        <present>true</present>
    </check>
    <action>
        <perform></perform>
    </action>
    <a>
        <Weight>1Kg</Weight>
    </a>
</all>
在XSLT之后

我的预期输出是

<?xml version="1.0" encoding="UTF-8"?><all>
<one>Something 1</one>
<two>something 2</two>
<check>
<present>true</present>
</check>
<action>
<perform/>
</action>
<a>
<UNIT-WEIGHT>2.2046226218487757</UNIT-WEIGHT>
</a>
</all>

为此我写

<!-- identity transform -->
<xsl:template match= "@*|node()" >
    <xsl:copy>
        <xsl:apply-templates select= "@*|node()" />
    </xsl:copy>
</xsl:template >

<xsl:template match="Weight">
    <UNIT-WEIGHT>
      <xsl:value-of select=". div 0.45359237"/>
    </UNIT-WEIGHT>
    </xsl:template>

如果<Weight>1</Weight>我得到了我想要的输出&amp;如果<Weight>1Kg</Weight>我得到<UNIT-WEIGHT>NaN</UNIT-WEIGHT>

我需要做什么?

1 个答案:

答案 0 :(得分:1)

在回答此问题之前,我更愿意知道可以的价值是Weight。一两个例子没有披露规则。

尝试一下:

<xsl:template match="Weight">
    <UNIT-WEIGHT>
        <xsl:value-of select="translate(., translate(., '.0123456789', ''), '') div 0.45359237"/>
    </UNIT-WEIGHT>
</xsl:template>

这将过滤掉除数字和小数点以外的所有字符,这些字符是构造有效数字所必需的(假设权重不能为负数)。

请注意,这将失败,例如:

<Weight>1.5 kg.</Weight>

因为1.5.不是有效号码。