Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#XSLT基于childnode的属性删除父节点_C#_Xml_Xslt - Fatal编程技术网

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”。好的,现在呢?