XSLT:如何排除具有特定字符串的元素

时间:2016-07-20 14:01:42

标签: xslt

我有这个xml:

<Elements>
  <tag1>
    <ID>title</ID>
    <EventDescription>description</EventDescription>
    <ContentDuration>01:30:35:02</ContentDuration>
    <Format>format</Format>
    <Segment1>10:00:00:00-10:10:46:02</Segment1>
    <Segment2>10:10:46:08-10:22:31:13</Segment2>
    <Segment3>-</Segment3>
    <Segment4>-</Segment4>
    <Segment5>-</Segment5>
    <Segment6>-</Segment6>
  </tag1>
</Elements>

我想排除只包含字符串“ - ”的元素 结果应该是这样的

<Elements>
<tag1>
 <ID>title</ID>
 <EventDescription>description</EventDescription>
 <ContentDuration>01:30:35:02</ContentDuration>
 <Format>format</Format>
 <Segment1>10:00:00:00-10:10:46:02</Segment1>
 <Segment2>10:10:46:08-10:22:31:13</Segment2>
 </tag1>
 </Elements>

1 个答案:

答案 0 :(得分:2)

identity template.

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

然后添加模板以匹配和排除文本等于&#34; - &#34;

的元素
 <xsl:template match="*[text() = '-']" />

试试这个XSLT

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="xml" indent="yes" />
    <xsl:strip-space elements="*" />

    <xsl:template match="*[text() = '-']" />

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

编辑:在回复LarsH的评论时,如果你确实有一个你想要删除的<Segment3>-<a /></Segment3>节点,请尝试将模板更改为:

<xsl:template match="*[not(*) and text() = '-']" />