我搜索了SO并找到了引用Accepted Answer,但它没有解决我的问题。我有一个简单的html dom:
<div class="name-hg">
<h2 class="head-name"><a href="http://www.example.com/example.html" title="Example title">Times have changed</a></h2>
<div class="sub-name">10 Things you did not know about time</div>
</div>
<div class="name-hg">
<h2 class="head-name"><a href="http://www.example.com/example.html" title="Example title">A Guide to mental fitness</a></h2>
<div class="sub-name">I am fit... mentally that is.</div>
</div>
<div class="name-hg">
<h2 class="head-name"><a href="http://www.example.com/example.html" title="Example title">Sllippers & Boots</a></h2>
<div class="sub-name">Fashion for the eccentric</div>
</div>
<div class="name-hg">
<h2 class="head-name"><a href="http://www.example.com/example.html" title="Example title">Bic Pen Era</a></h2>
<div class="sub-name">Your childhood could not have been better</div>
</div>
我正在尝试使用xPath来获取所有(连接字符串)“head-name”和“sub-name”类的内容。我的xPath表达式没有成功:
$x("string-join((//div[@class='name-hg']/h2[@class='head-name']/a/text(), //div[@class='name-hg']/div[@class='sub-name']/text()),' ')")
我在Chrome控制台中尝试时收到的错误消息是:
Uncaught DOMException: Failed to execute 'evaluate' on 'Document': The string 'string-join((//div[@class='name-hg']/h2[@class='head-name']/a/text(), //div[@class='name-hg']/div[@class='sub-name']/text()),' ')' is not a valid XPath expression.(…)
如果有另一个我可以使用的表达式(比如跟随兄弟),那就太好了。
非常感谢
答案 0 :(得分:0)
这是XPath 2.0中的答案(string-join()是XPath 2.0函数)
normalize-space(string-join(//div[@class='name-hg']//text(), ' '))
不可能通过纯XPath 1.0进行字符串加入 - 你只需列出所有节点而不加入(然后通过外部代码迭代和加入,例如JavaScript),可能它适用于你。
//div[@class='name-hg']//text()