【发布时间】:2015-09-15 23:34:42
【问题描述】:
我尝试删除空节点,但不是全部,例如我有标签:
1.<abc></abc> - it should be delete
2.<cde/> - it should not be delete.
3.<fgh/> - it SHOULD be delete.
所以,我想删除第 2 点中的空节点(显式名称“CDE”)
换句话说:当像'cde'这样的标签和标签为空时,然后删除。 : D
有可能吗?
我找到了删除所有空节点的代码:
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="*[descendant::text() or descendant-or-self::*/@*[string()]]">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="@*[string()]">
<xsl:copy/>
</xsl:template>
</xsl:stylesheet>
编辑:
XML 看起来像:
<system/>
<smth></smth>
<smth2>?</smth2>
<smth3>?</smth3>
<smth4></smth4>
<smth4></smth4>
<smth5/>
XML 可以包含很多标签,比如 - 所以我已经动态地删除了它们。 一些看起来我想删除的标签。但是在这个 XML 中应该保留。
所以 XML 输出应该是这样的:
<system/>
<smth2>?</smth2>
<smth3>?</smth3>
I found the solution: http://xsltransform.net/nc4NzRx/3. : )
【问题讨论】:
-
您的要求似乎矛盾。
-
为什么?我只是不想删除显式标签。在这种情况下名称:CDE。
-
但是你的问题是“2.
- 它不应该被删除。”然后是“我想删除第 2 点中的空节点(显式名称“CDE”)”,因此第一个引用的句子与第二个引用的句子相矛盾。 -
哦,对了!当然。我的错。我不想删除第 2 点中的空节点。如果我的 xml 看起来像:
? 输出应该看起来像:? -
这个恐怕还是不清楚。您可以 (a) 删除除显式命名的空节点之外的所有空节点,或 (b) 仅删除显式命名的空节点。 --附言请不要在 cmets 中发布代码;改为编辑您的问题。