您在下面看到的HTML是我从远程站点抓取的文本,原样是一个局部变量。
现在我需要将HTML标记中的authorName
和bookTitle
解析为自己的变量,并给出以下一致格式的已删除文本:
<p>
William Faulkner - 'Light In August'
<br/>
William Faulkner - 'Sanctuary'
<br/>
William Faulkner - 'The Sound and the Fury'
</p>
是否可以在XPath中执行此操作?
答案 0 :(得分:2)
是。也很简单:
//p/text()
将为您提供三个单独的文本节点:
"
William Faulkner - 'Light In August'
",
"
William Faulkner - 'Sanctuary'
",
"
William Faulkner - 'The Sound and the Fury'
"
请记住,前导和尾随空格(包括任何换行符)始终是文本节点的一部分。修剪结果。
我认为你不需要帮助将结果字符串分成作者和标题。
答案 1 :(得分:2)
在XPath 1.0中,您可以选择p
的文本节点子项:
/p/text()
您还可以获取每个文本节点之前(作者)和之后(标题)-
字符的字符串
substring-before(/p/text()[1],'-')
结果:
William Faulkner
substring-after(/p/text()[1],'-')
结果:
'Light In August'
在XPath 2.0中:
/p/text()/substring-before(.,'-')
产生3个项目的序列:
William Faulkner William Faulkner William Faulkner
并且
/p/text()/substring-after(.,'-')
结果也包含3个项目:
'Light In August' 'Sanctuary' 'The Sound and the Fury'
答案 2 :(得分:1)
您可以使用此XPath表达式获取第N个作者姓名:
substring-before(normalize-space(p/text()[$N]), ' -')
您可以使用此XPath表达式获取$ N-title :
substring-after(normalize-space(p/text()[$N]), ' - ')
您可以首先获得所有文本节点的计数:
count(p/text())
然后你可以发出前两个XPath表达式,用$N
替换区间中的数字
[1,count(p/text())]