我要查询的部分HTML:
<div class="author">
Tobi Raphael
<div class="artdate"> Last Updated: 24 July 2014|16:25 GMT</div>
</div>
我只需要“Tobi Raphael”。我不想要<div class"artdate"
元素。
我已尝试过以下XPath表达式,但无效:
[@class='author']/*/descendant-or-self::*[text() and not(self::div)]
我的查询有什么问题?
答案 0 :(得分:1)
您应该从root或所选元素开始。
假装我们在根
/div[@class='author']/text()
这会将所有文本放在元素中,包括空文本,制表符等等......:
Text='Tobi Raphael'
Text=''
如果我们想避免那个
/div[@class='author']/text()[normalize-space(.) != '']
输出Just text:
Text='Tobi Raphael'
答案 1 :(得分:0)
您的查询存在多个问题:
//div
这样的内容?div
,然后所有子项以及包含文本节点但不是div”的所有元素节点。请改为选择文本子项。使用XPath,您不能排除子树的一部分,但需要专门匹配您想要的子树(此处:文本节点)。选择作者div
的所有直接文字儿童:
//div[@class="author"]/text()
根据您的XPath实现,您可能需要进一步过滤空文本节点:
//div[@class="author"]/text()[normalize-space(.) != ""]