【问题标题】:how to delete a xml node if it has no child nodes如果xml节点没有子节点,如何删除它
【发布时间】: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 输出。
  • 上述代码有效

标签: php xml nodes


【解决方案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 之前删除一个空节点(如果存在)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-09
  • 1970-01-01
  • 2013-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多