如果温度> XSL删除标签20否则复制标签

时间:2017-11-25 21:04:53

标签: xslt

所以我必须用温度>的条件转换这个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 &gt; 20">
            <xsl:apply-templates />
        </xsl:if>           
        <xsl:if test="temperature &lt;= 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>

1 个答案:

答案 0 :(得分:3)

而不是这样做....

<xsl:if test="temperature &gt; 20">

你需要这样做......

<xsl:if test=". &gt; 20">

因为您已经在匹配temperature的模板中,所以测试temperature &gt; 20将寻找一个名为temperature的子元素,而真正想要检查的是值当前节点。

此外,不是这样做,而是以递归方式匹配相同的模板

<xsl:apply-templates select="//temperature|node()"/>

你可以这样做....

<xsl:apply-templates />

所以你的模板看起来像这样......

<xsl:template match="temperature">
        <xsl:if test=". &gt; 20">
            <xsl:apply-templates />
        </xsl:if>           
        <xsl:if test=". &lt;= 20">
            <xsl:copy>
                <xsl:apply-templates />
            </xsl:copy>
        </xsl:if>
</xsl:template>

但是,有一种简单的方法。而不是上面的模板,只需更具体的模板匹配您要删除的节点....

<xsl:template match="temperature[. &gt; 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[. &gt; 20]" />
</xsl:stylesheet>