在空父节点中删除子节点结果

问题描述:

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

deleting the parent node if child node is not present in xml using xslt

在参考上述文章中的例子中,我能够<car>下删除的内容。但是,我的源XML有一个转折。转折点在于它有一个命名空间。

例如:

源XML

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

输出XML:

<car/> 

我在执行,结果是我的XML输出空轿厢节点。我期待汽车节点完成删除,但无论我尝试了什么,空车节点仍保留在输出xml中。

有没有办法彻底删除那个汽车节点?我怀疑我的命名空间与它有关,因为没有命名空间,它的工作原理和标签被完全删除。

+1

您已经说明了试图通过复制实例来学习一门编程语言的危险。这不是一个好的学习策略。找一本能够很好地解释语言概念的书,以便在复制它们之前了解这些示例。 – 2014-09-22 07:52:17

你需要指定命名空间car,采取的是要压制护理carCar

<?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> 
+0

是的,我有这个在我的实施。发生相同的行为。这个命名空间的模式是否有可能规定minOccurrence为1,因此XSLt强制空车节点? – 2014-09-23 02:27:42

+0

@CharlieLee:请提供一个显示问题的[**最小,完整和可验证示例(MCVE)**](http://stackoverflow.com/help/mcve)。在你这样做之前,我不会试图进一步回答。谢谢。 – kjhughes 2014-09-23 02:50:04

+0

够公平的。我感谢你的回应。 – 2014-09-23 04:13:45

我是能够实现通过链接进行二次改造过程是我想要的删除空的节点。这就是所谓的多通。因此,在单个XSLT样式表中,第一个输出是使用空节点创建的。然后在相同样式表的第二个转换中,搜索删除空节点。最终的输出提供了清洁的结果。双通道转型的例子是在这里:

Two phase processing: Do not output empty tags from phase-1 XSLT 2.0 processing