2017-04-26 17 views
0

我有以下HTML结构:的XPath,开始(文本)和以下,直到

<p><b> Some bold text which starts with xy <b> 
<p> text 
<p> text 
<p><b> Next bold text <b> 
<p> text 
<p> text 

我需要构建其掌握与XY开始只有等到下一次大胆的粗体文字毕竟文字的XPath不以xy开头的文本。我试图至今:

"//p/*[starts-with(text()),'xy']/following::text()" 

然而,这个掌握所有文本 - 也是不与XY开始下一个粗体文本之后。有什么建议么?

+0

我不太明白你想要得到什么。希望它对你有所帮助:''''[p [b [starts-with(。,'xy')]]/following :: * [previous :: p [b] [1]/b [starts-with(。,' xy')]]/text()' – splash58

+0

@ splash58感谢您的建议,我试过了 - 但问题仍然是,这个xpath还是掌握了p中的所有文本,包括那些不以XY。我需要的是只抓住每个以xy开头的粗体p后面的文本。 – Sera

回答

0

我发现这似乎工作的解决方案:

"//p/b[starts-with(.,'xy')]/following::p[count(preceding::b) = 1]" 

所以,关键是这里的柜台。权衡是通过将前面所有b的计数器设置为1,它不会比以b开头的b之后的第一个b更远,但它也包含该b中的文本。这当然可以改善,但现在我的目的可以。

相关问题