如果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>

请忽略节点名称:如果我删除它正在删除但未删除结束标记,如删除后 &lt;/tag&gt; 仍然存在:

$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节点没有子节点,如何删除它的主要内容,如果未能解决你的问题,请参考以下文章

使用 Linq 删除 XML 中的子节点

删除没有子节点的父节点

如何根据条件从 XML 中删除节点?

如何使用 vbscript 删除 XML 文件中的特定节点

如何使用 Swift 从 UITableViewCell 中删除 Firebase 中的特定子节点

[SSM+layui]汽车出租系统011_菜单管理-删除有子节点就不能删改了xml要重启服务删除菜单的时候关联关系也要删除通过模型驱动获取值