Xml 删除子节点会导致父节点为空

Xml 删除子节点会导致父节点为空,xml,xslt,Xml,Xslt,我是XSLT新手,我遵循下面的文章来实现我的需求。我的要求是,如果满足子节点中的条件,则完全删除父节点。与下面的文章相同 参考上面文章中的示例,我能够删除下面的内容。然而,我的源xml有一个转折点。问题在于它有一个名称空间 例如: 源xml <car xmlns="urn:test:v2xml"> ..... </car> 输出xml: <car/> 在我的实现中,结果是XML输出中有一个空的car节点。我希望car节点被完全删除,但不管我做了什么尝试,

我是XSLT新手,我遵循下面的文章来实现我的需求。我的要求是,如果满足子节点中的条件,则完全删除父节点。与下面的文章相同

参考上面文章中的示例,我能够删除下面的内容。然而,我的源xml有一个转折点。问题在于它有一个名称空间

例如:

源xml

<car xmlns="urn:test:v2xml">
 .....
</car>
输出xml:

<car/>
在我的实现中,结果是XML输出中有一个空的car节点。我希望car节点被完全删除,但不管我做了什么尝试,空的car节点仍然保留在输出xml中

有没有办法完全移除那个汽车节点?我怀疑我的名称空间与此有关,因为如果没有名称空间,它会工作,并且标记会被完全删除。

您需要为car指定名称空间,注意是要抑制car还是car:


通过链接第二个转换过程来删除空节点,我能够实现我想要的。这叫多重通行证。因此,在单个XSLT样式表中,第一个输出是使用空节点创建的。然后在同一样式表中的第二次转换中,进行搜索以删除空节点。最终输出提供了清理结果。两次转换的示例如下:


您已经说明了通过复制示例来学习编程语言的危险。这不是一个好的学习策略。找一本足够好地解释语言概念的书,以便在复制示例之前理解它们。是的,我的实现中有这个。同样的行为也会发生。是否该名称空间的模式指示最小值为1,因此XSLt强制使用空汽车节点?@CharlieLee:请提供一个说明问题的示例。在你这样做之前,我不会试图进一步回答。谢谢,很公平。我很感激你的回复。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:v2="urn:test:v2xml"
                version="1.0">
    <!--Identity template to copy all content by default-->
    <xsl:template match="node()|@*">
        <xsl:copy>
            <xsl:apply-templates select="node()|@*"/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="v2:car[not(Price)]"/>
</xsl:stylesheet>