如果我有一个像这样的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>
?
答案 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"