为何getElementsByTagName返回的NodeValue始终固定不变?
关于DOMDocument中NodeValue始终显示特定内容的问题解答
嘿,这个问题其实是DOM节点属性的工作机制导致的,我来给你拆解清楚:
首先,你要明白在PHP的DOMDocument里,元素节点的nodeValue属性会返回该元素所有后代文本节点的内容拼接,而不是元素自身的"值"(因为像<root>这种元素本身没有直接的文本内容,它的文本都嵌套在子元素里)。
看你的XML结构:
<root> <teams> <team>Silverbacks</team> <team foo="winner">Golden eyes </team> </teams> </root>
当你获取<root>元素的nodeValue时,它会忽略所有标签,把里面所有文本内容都提取出来合并——也就是<team>里的"Silverbacks"和"Golden eyes ",所以最终就得到了你看到的"Silverbacks Golden eyes"(可能你看到的是去掉了末尾空格的版本)。
而当你搜索<team>这种子元素时,每个<team>的nodeValue就是它自己包含的文本,所以显示会符合你的预期。
举个完整的代码例子来验证:
<?php $xmlString = <<<XML <root> <teams> <team>Silverbacks</team> <team foo="winner">Golden eyes </team> </teams> </root> XML; $dom = new DOMDocument(); $dom->loadXML($xmlString); // 获取root节点的nodeValue $rootNode = $dom->getElementsByTagName('root')->item(0); echo $rootNode->nodeValue; // 输出:Silverbacks Golden eyes // 获取第一个team节点的nodeValue $firstTeam = $dom->getElementsByTagName('team')->item(0); echo "\n" . $firstTeam->nodeValue; // 输出:Silverbacks ?>
如果你的目标是获取特定节点的文本,而不是所有后代的拼接,那你需要定位到具体的子元素(比如上面例子里的<team>节点),而不是直接取<root>的nodeValue。
内容的提问来源于stack exchange,提问作者Harry
相关产品推荐
相关产品推荐

