我有一个XML:
<?xml version="1.0" encoding="UTF-8"?>
<COLLECTION>
<Weight>15 kg</Weight>
<WeightUnits></WeightUnits>
</COLLECTION>
我想对KG执行KG
为此我写了:
<xsl:template match="Weight">
<weight>
<xsl:value-of
select="translate(., translate(., '.0123456789', ''), '') div 0.45359237" />
</weight>
</xsl:template>
<xsl:template match="WeightUnits">
<weightUnits>lbs</weightUnits>
</xsl:template>
一切正常:
我的问题是如何检查<Weight>
即如果Weight
的值存在,那么只有weightUnits
包含LBS,而Weight
为空weightUnits
也是空的。
请帮我解决这个问题。
答案 0 :(得分:0)
尝试以下方法:
XSLT 1.0:
emplace_back
XSLT 2.0:
<xsl:template match="WeightUnits">
<weightUnits>
<xsl:if test="../Weight!=''">
<xsl:value-of select="'lbs'"/>
</xsl:if>
</weightUnits>
</xsl:template>
答案 1 :(得分:0)
这是一个完全不使用任何XSLT条件运算符的解决方案:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Weight">
<weight><xsl:apply-templates/></weight>
</xsl:template>
<xsl:template match="Weight/text()[normalize-space()]">
<xsl:value-of
select="translate(., translate(., '.0123456789', ''), '') div 0.45359237" />
</xsl:template>
<xsl:template match="WeightUnits">
<weightUnits><xsl:apply-templates
select="../Weight[normalize-space()]" mode="lbs"/></weightUnits>
</xsl:template>
<xsl:template match="*" mode="lbs">lbs</xsl:template>
</xsl:stylesheet>
在提供的XML文档上应用此转换时:
<COLLECTION>
<Weight>15 kg</Weight>
<WeightUnits></WeightUnits>
</COLLECTION>
产生了想要的正确结果:
<COLLECTION>
<weight>33.06933932773163</weight>
<weightUnits>lbs</weightUnits>
</COLLECTION>
对以下XML文档应用相同的转换时(<weight>
为空):
<COLLECTION>
<Weight></Weight>
<WeightUnits></WeightUnits>
</COLLECTION>
再次生成想要的正确结果:
<COLLECTION>
<weight/>
<weightUnits/>
</COLLECTION>