如果孩子有一些特定的字符串,则将整个节点排除



我有以下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>

这可能对您有用。它在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>

最新更新