Templates XSLT首先删除一些子节点,如果没有剩余的子节点,则删除父节点
我只是花了几天时间寻找解决方案,却没有找到任何解决方案 所以我有一个xml,我想在它上面应用两个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>
<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和填充位置可能会有所帮助。