我正在尝试获取 /td/span 的所有文本节点。
我正在尝试使用 xpath /td/span/text()
问题是它返回每个文本元素的所有文本节点(这里有两个,“193”和“120”,它返回两次“193120”,而不是在单独的元素中返回 193 和 120)。
我在任何在线工具上尝试完全相同的 xpath,它工作正常,在 php 中,完全不同的结果。
使用 SimpleXMLElement
$xhtmlSnippet = '<td><span>193<span>10</span><span></span><div>66</div><span>195</span><span>.</span><span>34</span><span>242</span><span></span>120<span>64</span></span></td>';
$xml = new SimpleXMLElement($xhtmlSnippet);
$xresult = $xml->xpath('/td/span/text()');
foreach($xresult as $xnode){
echo "<br /><br />NodeValue: " . $xnode;
}
给我:
节点值:193120
节点值:193120
这是一个通过在线工具正常工作的示例(所有其他在线工具也提供预期的输出):
编辑:
使用 DOMDocument + DOMXPath,它似乎按预期工作:
$dom = new DOMDocument;
$dom->loadXML($xhtmlSnippet);
$xpath = new DOMXPath($dom);
foreach ($xpath->query('/td/span/text()) as $textNode) {
echo "\n\nTextNode: " . $textNode->nodeValue;
}
给出:
文本节点:193
文本节点:120