获取XPath选择器以输出父元素和子元素的文本

时间:2012-02-08 14:06:07

标签: xpath

我有一个像这样的HTML标签:

<html>
  <body>
      <h1>This is a <b>xyz</b> test</h1>
  </body>
</html>

如果我hxs.select('/html/body/h1/text()').extract(),则输出为This is a test。我应该如何指定XPath,使输出为This is a xyz test

4 个答案:

答案 0 :(得分:3)

尝试/html/body/h1//text()。双斜线将找到节点的所有下降,不一定是子节点

答案 1 :(得分:1)

您可能想要string function

string(/html/body/h1)

答案 2 :(得分:1)

XPath表达式选择的每个节点都有一个对应的字符串值。来自the spec

  

元素节点的字符串值是的串联   字符串 - 元素节点的所有文本节点后代的值   文件订单。

这正是你想要的。此字符串值通常是隐式使用的,但您可以使用string函数显式检索它。同样,the spec

  

字符串函数将对象转换为字符串,如下所示:

     
      
  • 通过返回字符串值将节点集转换为字符串   节点集中的节点,该节点是文档顺序中的第一个节点。如果   node-set为空,返回空字符串。
  •   

像这样使用:

string(/html/body/h1)

答案 3 :(得分:0)

你只需要写:'/html/body/h1'。您使用text()函数选择的内容是h1xyz不是)的子文本节点。