C#XSLT基于childnode的属性删除父节点
根据段落的子元素C#XSLT基于childnode的属性删除父节点,c#,xml,xslt,C#,Xml,Xslt,根据段落的子元素中包含的属性,我需要能够删除特定的父节点(及其子节点)。因此,在下面的示例中,我需要XSLT找到的实例,并从父元素中删除所有内容。换句话说,我正在尝试完成条件文本过滤。我需要匹配(和删除)的元素将始终是的父元素,但可能不会像示例中那样始终是,因此我需要以某种方式指定它需要匹配“applic”元素的父元素,而不是显式指定para0 这个例子应该更清楚。我需要删除所有版本属性为ABCD的para0数据 这是一些示例XML <root> <para0>
中包含的属性,我需要能够删除特定的父节点(及其子节点)。因此,在下面的示例中,我需要XSLT找到
的实例,并从父
元素中删除所有内容。换句话说,我正在尝试完成条件文本过滤。我需要匹配(和删除)的元素将始终是
的父元素,但可能不会像示例中那样始终是
,因此我需要以某种方式指定它需要匹配“applic”元素的父元素,而不是显式指定para0
这个例子应该更清楚。我需要删除所有版本属性为ABCD的para0数据
这是一些示例XML
<root>
<para0>
<applic>
<model>
<version version="ABCD"></version>
</model>
</applic>
<subpara1><title>First Title</title>
<para>Some text relating to ABCD configuration</para>
</subpara1>
<subpara1><title>Second Title</title>
<para>Some other text and stuff relating to ABCD configuration</para>
</subpara1>
</para0>
<para0>
<applic>
<model>
<version version="TRAINING"></version>
</model>
</applic>
<subpara1><title>First Title</title>
<para>Some text relating to TRAINING configuration</para>
</subpara1>
<subpara1><title>Second Title</title>
<para>Some other text and stuff relating to TRAINING configuration</para>
</subpara1>
</para0>
</root>
第一个标题
有关ABCD配置的一些文本
第二名
其他一些与ABCD配置相关的文本和内容
第一个标题
有关培训配置的一些文本
第二名
与培训配置相关的其他文本和内容
这是到目前为止我拥有的XSLT,但我需要它,一旦与ABCD匹配,基本上选择并删除“applic”的父节点和所有子节点
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method = "xml" indent="yes"/>
<xsl:strip-space elements = "*" />
<xsl:template match = "@*|node()" >
<xsl:copy>
<xsl:apply-templates select = "@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match = "//applic/model[@*]/version[@version='ABCD']" />
</xsl:stylesheet>
您的“删除”模板必须与要删除的元素匹配,而不是其子元素
尝试:
XSLT1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*[applic/model/version/@version='ABCD']" />
</xsl:stylesheet>
Thank可能是重复的,但我并不总是匹配“para0”。“appic”标记后面可以是任意数量的元素。所以我需要删除一个未知元素,不是特别的“para0”。好的,现在呢?