以上是面试官问我的问题。他要求写下xpath。
我回答您可以将contains()
与AND
运算符一起使用。我也回答你可以使用following::
,但他说这不是正确答案。
有没有人知道如何在其中使用换行标记的整个语句的xpath?
答案 0 :(得分:1)
您可以通过测试父元素的字符串值来忽略介入的br
元素。
例如,对于包含此类div
元素的XML,
<div>
<input id='2'/>
Hello
<br/>
World
</div>
这个XPath,
//div[normalize-space() = "Hello World"]
将选择空格规范化字符串值为div
的所有此类"Hello World"
元素。
OTOH,您可以通过此XPath专门选择包含Hello<br/>World
的元素:
//br[preceding-sibling::node()[1][self::text()[normalize-space()="Hello"]]]
[following-sibling::node()[1][self::text()[normalize-space()="World"]]]/..
这只是Mads Hansen's idea(+1)的重写,所以请提出他的回答。
答案 1 :(得分:1)
如果<br/>
将两个单词分开的事实很重要,那么以下XPath将起作用。它会查找foo<br/>bar
它选择包含值为text()
的子foo
节点的任何元素,该节点后面紧跟着<br/>
兄弟,后面紧跟着一个兄弟text()
值为bar
的节点。
不知道你想要多么严格。在评估normalize-space()
值时,您可以使用text()
来容纳前导和尾随空白字符:
//*[text()[normalize-space(.)='foo']
/following-sibling::node()[1][self::br]
/following-sibling::node()[1][self::text()[ normalize-space(.)='bar']]]