如果xml节点没有子节点,如何删除它
Posted
技术标签:
【中文标题】如果xml节点没有子节点,如何删除它【英文标题】:how to delete a xml node if it has no child nodes 【发布时间】:2018-11-11 04:14:10 【问题描述】:我正在创建带有条件的 xml 节点,如果节点没有子节点,我想删除它:
<main>
<tags>
<tag></tag>
<tag>hello</tag>
<tag>hello1</tag>
</tags>
</main>
在保存 xml 之前我想要这个输出:
<main>
<tags>
<tag>hello</tag>
<tag>hello1</tag>
</tags>
</main>
请忽略节点名称:如果我删除它正在删除但未删除结束标记,如删除后 </tag>
仍然存在:
$doc = new DOMDocument;
$doc->load($path);
$element = $doc->documentElement;
$elementtodelete = $element->getElementsByTagName('OthersInc')->item(0);
if(! $elementtodelete->hasChildNodes())
$oldelement = $elementtodelete->parentNode->removeChild($elementtodelete);
【问题讨论】:
您是否使用任何库来帮助您在 php 中操作 xml?你能展示一下你目前拥有的代码吗? 请添加您拥有的完整源代码以及您当前使用源代码获得的 XML 输出。 上述代码有效 【参考方案1】:检查此代码
<?php
$doc = new DOMDocument;
$doc->preserveWhiteSpace = false;
$doc->loadxml('<main>
<tags>
<tag></tag>
<tag>hello</tag>
<tag>hello1</tag>
</tags>
</main>');
$xpath = new DOMXPath($doc);
foreach( $xpath->query('//*[not(node())]') as $node )
$node->parentNode->removeChild($node);
$doc->formatOutput = true;
echo $doc->savexml();
检查您想要的output
【讨论】:
我没有准备好 xml,我正在创建它,在创建时我想删除没有子节点的空节点 我不明白...首先创建 xml 然后应用上面的脚本 在执行 $xmlDoc->save($path) 之前我想删除那个节点 有可能吗? 添加了一个示例,只是想在保存 xml 之前删除一个空节点(如果存在)以上是关于如果xml节点没有子节点,如何删除它的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Swift 从 UITableViewCell 中删除 Firebase 中的特定子节点
[SSM+layui]汽车出租系统011_菜单管理-删除有子节点就不能删改了xml要重启服务删除菜单的时候关联关系也要删除通过模型驱动获取值