我有一个像这样的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
。
答案 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()
函数选择的内容是h1
(xyz
不是)的子文本节点。