Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.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
Templates XSLT首先删除一些子节点,如果没有剩余的子节点,则删除父节点_Templates_Xslt_Nodes_Parent Child - Fatal编程技术网

Templates XSLT首先删除一些子节点,如果没有剩余的子节点,则删除父节点

Templates XSLT首先删除一些子节点,如果没有剩余的子节点,则删除父节点,templates,xslt,nodes,parent-child,Templates,Xslt,Nodes,Parent Child,我只是花了几天时间寻找解决方案,却没有找到任何解决方案 所以我有一个xml,我想在它上面应用两个,第二个取决于第一个: <xml> <parent> <data1>data</data1> <data2>data</data2> <childNodes> <childNode> <child> Value 2 </child> </ch

我只是花了几天时间寻找解决方案,却没有找到任何解决方案

所以我有一个xml,我想在它上面应用两个
,第二个取决于第一个:

<xml>

 <parent>
  <data1>data</data1>
  <data2>data</data2>
  <childNodes>
   <childNode>
    <child> Value 2 </child>
   </childNode>
  </childNodes>
 </parent>

 <parent>
  <data1>data</data1>
  <data2>data</data2>
  <childNodes>
   <childNode>
    <child> Value 1 </child>
   </childNode>
   <childNode>
    <child> Value 2 </child>
   </childNode>
   <childNode>
    <child> Value 3 </child>
   </childNode>
  </childNodes>
 </parent>

</xml>

数据
数据
价值2
数据
数据
值1
价值2
价值3
我的目标是:

  • 第一次删除子项时!='值1'使用该值:
    不能按您想要的顺序执行,因为在中,父节点是在子节点之前处理的

    但是,您可以轻松删除除要删除的子节点之外没有子节点(或者更确切地说是子节点)的父节点:

    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="parent[not(childNodes/childNode/child='Value 1')]"/>
    
    <xsl:template match="childNode[child!='Value 1']"/>
    
    </xsl:stylesheet>
    

    您使用哪个XSLT处理器或哪个版本的XSLT?XSLT 3和填充位置可能会有所帮助。