DOM XML子节点

时间:2015-06-03 11:55:09

标签: php xml dom

如果我有一个像这样的XML:

  <?xml version="1.0" encoding="utf-8" ?> 
  <parent >
     <child>
         <grandchild>
         </grandchild>
     </child> 
  </parent>

我想得到父节点的所有子节点(例如使用php), 当我打电话

$xmlDoc->loadXML('..');

$rootNode = $xmlDoc->documentElement;

$children = $rootNode->childNodes;

$children包含哪些内容? 它是否只包含<child>个节点,它是否包含<child><grandchild>

1 个答案:

答案 0 :(得分:1)

parent文档元素节点有3个子节点。元素节点child和两个文本节点包含节点之前和之后的空格:

$document = new DOMDocument();
$document->loadXml($xml);
foreach ($document->documentElement->childNodes as $childNode) {
  var_dump(get_class($childNode));
}

输出:

string(7) "DOMText"
string(10) "DOMElement"
string(7) "DOMText"

如果禁用文档上的保留空格选项,它将在加载xml时删除空白节点。

$document = new DOMDocument();
$document->preserveWhiteSpace = FALSE;
$document->loadXml($xml);
...

输出:

string(10) "DOMElement"

以更灵活的方式获取节点使用Xpath。它允许您使用表达式来获取节点:

$document = new DOMDocument();
$document->loadXml($xml);
$xpath = new DOMXpath($document);

foreach ($xpath->evaluate('/*/child|/*/child/grandchild') as $childNode) {
  var_dump(get_class($childNode), $childNode->localName);
}

输出:

string(10) "DOMElement"
string(5) "child"
string(10) "DOMElement"
string(10) "grandchild"