简体   繁体   English

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

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

I am having the XML like this我有这样的 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>

From this I want to remove从这里我想删除

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

and

</root>

So expected result is所以预期的结果是

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

How can I do this?我怎样才能做到这一点?

Edit 1:TO Phil编辑 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); 
  } 

As you want the inner markup of the <root> node, that is the element who's child nodes you'll want to iterate.当您想要<root>节点的内部标记时,即您要迭代的子节点元素。 You can access this element using the DOMDocument::documentElement property.您可以使用DOMDocument::documentElement属性访问此元素。

Try this (tested and working)试试这个(测试和工作)

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

I expect that the root element is returned also, you have to know that for each xml file an is added impliicitly, even if it exists in your file.我希望根元素也被返回,您必须知道对于每个 xml 文件,都会隐式添加一个,即使它存在于您的文件中。 so try to do this所以尝试这样做
$children = $element->childNodes->childNodes; $children = $element->childNodes->childNodes;
i think that would help you.我认为这会对你有所帮助。

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

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