-2

我想知道 XPath 有没有办法返回特定元素的 HTML?

<td>
1212 S.W. 123 St.
<br>
Flower, Maryland 11234
<br>
United States
</td>

XPath 查询:

string(//table[@cellspacing='10']/tr[2]/td[2])

电流输出

1212 S.W. 123 St.Flower, Maryland 11234United States

期望的输出:

1212 S.W. 123 St.<br>Flower, Maryland 11234<br>United States

4

2 回答 2

2

你要一个字符串,所以你得到一个字符串。如果您只需要节点,只需处理表数据元素的子节点:

  table[@cellspacing='10']/tr[2]/td[2]/node()

...您将获得文本和元素节点。

如果您使用的是 XSLT,请不要使用<xsl:value-of>,因为这也会给您一个字符串,用于<xsl:copy-of>获取节点。尽管我怀疑您没有使用 XSLT,因为您无法将 HTML 输入到 XSLT 进程中。

于 2013-06-29T20:31:34.420 回答
0

这与其说是 XPath 问题,不如说是 PHP 问题。您并没有真正说出您使用什么来运行 XPath,但我将假设 DOM,因为您正在解析 HTML。

下面是获取元素内部内容所需的代码。请注意,一旦找到节点,您需要调用nodeValue以获取其下方的所有内容。

<?php

$html = <<<HTML
<table>
    <tr>
        <td>
            1212 S.W. 123 St.
            <br>
            Flower, Maryland 11234
            <br>
            United States
        </td>
    <tr>
</table>
HTML;
$dom = new DOMDocument;
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$nodes = $xpath->query('//table/tr/td');

foreach($nodes as $node) {
    echo $node->nodeValue;
}

?>
于 2013-06-30T23:56:30.307 回答