如何在xpath中的两个br标签之间获取?
问题描述:
我有一个表TD这样如何在xpath中的两个br标签之间获取?
<td>
<span> Washington US <br>98101 Times Square</span>
</td>
我可以在页面中的所有元素,但我需要分别获得这两个值。如果这是不可能的,我想以某种方式得到98101 Times Square
我曾尝试做一些像string(//tr[3]//td[2])/
但我得到的是两个文本连接在一起。
答
您可以span/text()
所以假设你发布路径选择td
包含要//tr[3]//td[2]/span/text()
的span
选择在span
元素的文本子节点。
下面是一个示例:
$html = <<<EOD
<html>
<body>
<table>
<tr>
<td>1</td>
</tr>
<tr>
<td>2</td>
</tr>
<tr>
<td>3,1</td>
<td>
<span> Washington US <br>98101 Times Square</span>
</td>
</tr>
</body>
</html>
EOD;
$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DOMXPath($doc);
$textNodes = $xpath->query('//tr[3]//td[2]/span/text()');
foreach ($textNodes as $text) {
echo $text->textContent . "\n";
}
输出
Washington US
98101 Times Square
答
尝试
td/span/node()[1]
和
td/span/node()[3]
或
td/span/text()[1]
td/span/text()[2]
但是只有一个跨度,我该如何选择父/子? –
@mvrht,我不明白为什么单个跨度是我建议的路径的问题。我已经添加了一个代码片段,可能有帮助。 –
我的不好。我以为我不必做foreach。我认为xpath会分割并将其作为数组返回 –