我正在尝试选择网页上 ul 标记和 p 标记中的所有文本。我发现很难同时选择两者。我可以单独选择每个没有问题。这是我到目前为止所尝试的:
('//p and ul');
('//p::ul');
我也在尝试选择一个特定的列表。网页上有多个列表,但我只对一个感兴趣。我将如何选择页面上具有特定 ID 的标签内的所有列表,例如
<div id="thisistheid"
<ul....
谢谢你的帮助。
我正在尝试选择网页上 ul 标记和 p 标记中的所有文本。我发现很难同时选择两者。我可以单独选择每个没有问题。这是我到目前为止所尝试的:
('//p and ul');
('//p::ul');
我也在尝试选择一个特定的列表。网页上有多个列表,但我只对一个感兴趣。我将如何选择页面上具有特定 ID 的标签内的所有列表,例如
<div id="thisistheid"
<ul....
谢谢你的帮助。
And 和 Or是布尔表达式:
通过评估每个操作数并将其值转换为布尔值来评估 and 表达式,就像调用布尔函数一样。如果两个值都为真,则结果为真,否则为假。如果左操作数的计算结果为假,则不计算右操作数。
由于一个节点不能同时是 P 和 UL,因此您的测试将永远不会返回 true。
尝试使用 Union 运算符(一个PathExpression):
//p | //ul
这将为您提供文档中的所有 p 和 ul 元素
要获取具有特定 id 的节点,您可以使用id() 函数
id('thisistheid')
如果由于某种原因这不起作用,您仍然可以使用属性测试,例如
//div[@id='thisistheid']
或者 - 如果您使用DOM API,您可以使用getElementById()
.
您可以在http://schlitt.info/opensource/blog/0704_xpath.html找到一个易于遵循的 XPath 教程
正如我的评论中提到的,我认为你需要使用//p and //ul
,但我不确定。
不过,我当然可以回答您的第二个问题://div[@id='thisistheid']//ul
仅ul
当 s 是#thisistheid
. 您也可以使用/ul
代替//ul
来仅允许一级深度(如果您有嵌套列表,则很有用)