如果子节点具有某些特定字符串,则排除父节点

时间:2017-09-26 18:52:13

标签: xslt-1.0

我有以下XML

<root>
<Package1>
<Name> Test </Name>
<Sales_Channel ID=123>
<Name>Online</Name>
</Sales_Channel>
<Sales_Channel ID=234>
<Name>Direct</Name>
</Sales_Channel>
</Package1>
<Package2>
<Name> Test </Name>
<Sales_Channel ID=234>
<Name>Direct</Name>
</Sales_Channel>
</Package2>
<Package3>
<Name> Test </Name>
<Sales_Channel ID=123>
<Name>Online</Name>
</Sales_Channel>
</Package3>
</root>

我想排除那些仅用

标记的包
<Sales_Channel ID=123>
<Name>Online</Name>
</Sales_Channel>

所以我的最终输出应如下所示:

<root>
<Package1>
<Name> Test </Name>
<Sales_Channel ID=123>
<Name>Online</Name>
</Sales_Channel>
<Sales_Channel ID=234>
<Name>Direct</Name>
</Sales_Channel>
</Package1>
<Package2>
<Name> Test </Name>
<Sales_Channel ID=234>
<Name>Direct</Name>
</Sales_Channel>
</Package2>
</root>

1 个答案:

答案 0 :(得分:0)

这可能对你有用。它适用于Microsoft 1.0。我确实需要在ID值周围添加引号以使其在那里工作。

  <!-- Suppress. -->
  <xsl:template match="*[contains(local-name(), 'Package') and .//Sales_Channel[@ID='123'] and not(.//Sales_Channel[@ID!='123'])]"/>

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