2013-06-29 79 views
-2

我想知道是否有方法让XPath返回特定元素的HTML?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

+0

请提供参考证明xpath应该如何通过它的规范返回一个这样的字符串。除非你愿意,我可以自由地处理与你*尝试*做的事情有关的文档副本。 – hakre

回答

1

您所要求的字符串,所以你正在获取一个字符串。如果你只是想要节点,只需地址表数据元素的子节点:

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

...你将得到文本和元素节点。

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

+0

感谢您的回复。这种方法不适合我。返回的结果与我从原始帖子中的xPath查询中删除'string()'调用相同。我正在尝试获取内部HTML ...我正在使用PHP,并且还可以访问google文档'importXML()'。 – AnchovyLegend

+0

然后我不能帮你,对不起。我知道我给你的XPath地址解决了节点问题,因此使用XPath的语言需要在节点上执行,而不是字符串。我不熟悉在PHP中使用'importXML()'。我希望别人能帮助你。 –

0

这不是一个XPath问题,更多的是PHP问题。你并没有真正说出你正在使用什么来运行你的XPath,但是我将假设你正在解析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; 
} 

?>