我正在尝试将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>
我需要做什么?
答案 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.
不是有效号码。