繁体   English   中英

如何使用 PHP 5.0 中的 DOM 提取 XML 中的子元素?

[英]How do extract child element in XML using DOM in PHP 5.0?

我有这样的 XML

  <?xml version="1.0" encoding="utf-8"?>
  <root>
      <mynode catid="10" catname="Animals" label="Animals" catdesc="" parent_id="2">
         <mynode catid="11" catname="Lions" label="Lions" catdesc="" parent_id="10">
           <mynode catid="12" catname="lion" label="lion" catdesc="" parent_id="11"/>
         <mynode catid="13" catname="lioness" label="lioness" catdesc="" parent_id="11"/>
        </mynode>
       </mynode>
    </root>

从这里我想删除

<?xml version="1.0" encoding="utf-8"?>
<root>

</root>

所以预期的结果是

        <mynode catid="10" catname="Animals" label="Animals" catdesc="" parent_id="2">
         <mynode catid="11" catname="Lions" label="Lions" catdesc="" parent_id="10">
           <mynode catid="12" catname="lion" label="lion" catdesc="" parent_id="11"/>
         <mynode catid="13" catname="lioness" label="lioness" catdesc="" parent_id="11"/>
        </mynode>
       </mynode>

我怎样才能做到这一点?

编辑 1:致菲尔

        $dom = new DomDocument();
       //$dom->preserveWhitespace = false;
     $dom->load('treewithchild.xml'); 

function DOMinnerHTML($element) 
{ 
$innerHTML = ""; 
$children = $element->childNodes; 

foreach ($children as $child) 
{ 

    $tmp_dom = new DOMDocument(); 
    $tmp_dom->appendChild($tmp_dom->importNode($child, true)); 
    $innerHTML.=trim($tmp_dom->saveXML()); 
    echo $tmp_dom->saveXML();
} 
return $innerHTML; 
 } 
  $dom->preserveWhiteSpace = false; 

  $domTable = $dom->getElementsByTagName("mynode"); 

    foreach ($domTable as $tables) 
   { 
//echo $tables;
       DOMinnerHTML($tables); 
  } 

当您想要<root>节点的内部标记时,即您要迭代的子节点元素。 您可以使用DOMDocument::documentElement属性访问此元素。

试试这个(测试和工作)

$doc = new DOMDocument;
$doc->load('treewithchild.xml');
$inner = '';
foreach ($doc->documentElement->childNodes as $child) {
    $inner .= $doc->saveXML($child);
}
echo $inner;

我希望根元素也被返回,您必须知道对于每个 xml 文件,都会隐式添加一个,即使它存在于您的文件中。 所以尝试这样做
$children = $element->childNodes->childNodes;
我认为这会对你有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM