php - DOM XML 子节点

标签 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>节点 ot 是否包含 <child><grandchild>两者都?

最佳答案

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"

关于php - DOM XML 子节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30619403/

相关文章:

php - MySQL 或 PHP 错误? IPV6

java - 从网页解析 XML

xml - XSL 在 for-each 中按属性查找元素

javascript - 为什么我的 document.getElementById 为 Null?

javascript - jQuery Validation form后卡住,继续提交

php - 这是 flash、php 和 mysql 中的错误登录算法吗?

java - 有 token_get_all 变体吗?

android - 在 Android 中轻松翻译 xml

javascript - nth-child 不处理动态生成的 DOM

javascript - HTML元素插入DOM时是否有 "element ready"事件?