如果我有一个像这样的 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/