我使用此解决方案从生成的XML中删除空标记。
Remove empty tags from a XML with PHP
但是,如果生成的XML具有空的嵌套节点,例如:
<metro>
<distance></distance>
<name></name>
</metro>
然后该部分的结果将是
<metro/>
有没有办法删除那些自动关闭标签?
答案 0 :(得分:1)
不知道您是否可以在设置中使用它,但使用XPath-Expression
/*/metro/*[normalize-space()]/parent::*
你只会得到带有非空的孩子的城域节点。
答案 1 :(得分:1)
对您引用的XPath的简单修改应该可以满足您的需求:
//*[not(normalize-space())]
foreach( $xpath->query('//*[not(normalize-space())]') as $node ) {
$node->parentNode->removeChild($node);
}
您链接的问题中的答案可以解释为“匹配所有没有子节点的元素”。 metro
有五个子节点,因此XPath与它不匹配。
我的回答中的XPath可以解释为“匹配所有不包含任何非空白文本的元素”。
如果你不熟悉它,我建议你阅读normalize-space()
,但基本上在这种情况下,如果一个元素中的所有文本节点都是空格,它会产生一个空字符串,所以在{{{3}}的情况下1}}我们有:
metro
由于谓词评估为not(normalize-space())
not(normalize-space(.)) // If no argument is specified, the context node is used.
not(normalize-space(" // normalize-space() expects a string, so the nodeset . is
// replaced with its string-value (all the text it contains).
"))
not("") // normalize-space() eliminates all leading and trailing
// whitespace.
not(false()) // not() expects a boolean, and the boolean equivalent of
// the empty string is false()
true()
,因此选择了true()
。