所以我必须用温度>的条件转换这个XSL。 20删除标签,否则复制温度 到目前为止,我得到了类似的东西
<?xml version="1.0" ?>
<message-in>
<realised-gps>
<id>64172068</id>
<resourceId>B-06- KXO</resourceId>
<position>
<coordinatesystem>Standard</coordinatesystem>
<latitude>44.380765</latitude>
<longitude>25.9952</longitude>
</position>
<time>2011-05- 23T10:34:46</time>
<temperature>21.01</temperature>
<door>0</door>
</realised-gps>
</message-in>
这只是删除我无法生成其他或其他if条件的标签
<xsl:stylesheet version="2.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="temperature">
<xsl:if test="temperature > 20">
<xsl:apply-templates />
</xsl:if>
<xsl:if test="temperature <= 20">
<xsl:copy>
<xsl:apply-templates select="//temperature|node()"/>
</xsl:copy>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
温度的预期输出文件&lt;超过20
<?xml version="1.0" ?>
<message-in>
<realised-gps>
<id>64172068</id>
<resourceId>B-06- KXO</resourceId>
<position>
<coordinatesystem>Standard</coordinatesystem>
<latitude>44.380765</latitude>
<longitude>25.9952</longitude>
</position>
<time>2011-05- 23T10:34:46</time>
<temperature>15</temperature>
<door>0</door>
</realised-gps>
</message-in>
答案 0 :(得分:3)
而不是这样做....
<xsl:if test="temperature > 20">
你需要这样做......
<xsl:if test=". > 20">
因为您已经在匹配temperature
的模板中,所以测试temperature > 20
将寻找一个名为temperature
的子元素,而真正想要检查的是值当前节点。
此外,不是这样做,而是以递归方式匹配相同的模板
<xsl:apply-templates select="//temperature|node()"/>
你可以这样做....
<xsl:apply-templates />
所以你的模板看起来像这样......
<xsl:template match="temperature">
<xsl:if test=". > 20">
<xsl:apply-templates />
</xsl:if>
<xsl:if test=". <= 20">
<xsl:copy>
<xsl:apply-templates />
</xsl:copy>
</xsl:if>
</xsl:template>
但是,有一种简单的方法。而不是上面的模板,只需更具体的模板匹配您要删除的节点....
<xsl:template match="temperature[. > 20]" />
试试这个XSLT
<xsl:stylesheet version="2.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="temperature[. > 20]" />
</xsl:stylesheet>