在空父节点中删除子节点结果
我是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中。
有没有办法彻底删除那个汽车节点?我怀疑我的命名空间与它有关,因为没有命名空间,它的工作原理和标签被完全删除。
你需要指定命名空间car
,采取的是要压制护理car
或Car
:
<?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>
是的,我有这个在我的实施。发生相同的行为。这个命名空间的模式是否有可能规定minOccurrence为1,因此XSLt强制空车节点? – 2014-09-23 02:27:42
@CharlieLee:请提供一个显示问题的[**最小,完整和可验证示例(MCVE)**](http://stackoverflow.com/help/mcve)。在你这样做之前,我不会试图进一步回答。谢谢。 – kjhughes 2014-09-23 02:50:04
够公平的。我感谢你的回应。 – 2014-09-23 04:13:45
我是能够实现通过链接进行二次改造过程是我想要的删除空的节点。这就是所谓的多通。因此,在单个XSLT样式表中,第一个输出是使用空节点创建的。然后在相同样式表的第二个转换中,搜索删除空节点。最终的输出提供了清洁的结果。双通道转型的例子是在这里:
Two phase processing: Do not output empty tags from phase-1 XSLT 2.0 processing
您已经说明了试图通过复制实例来学习一门编程语言的危险。这不是一个好的学习策略。找一本能够很好地解释语言概念的书,以便在复制它们之前了解这些示例。 – 2014-09-22 07:52:17