如何基于最小Xpath'?

时间:2014-06-10 19:55:44

标签: xml xpath firebug greasemonkey

我正在查看firebug中的一个页面,并确定了从中获取文本所需的不同内容部分。 Firebug提供了复制Xpath或Minimal Xpath的功能。

Xpath: /html/body/div[2]/div/div[2]/div[2]/form/div[2]/div/span[2]/input
Minimal Xpath: //*[@id="SeatCount"]

我正在尝试为greasemonkey编写一个脚本,该脚本根据此内容获取文本。 我能够使用这个位从其中一个字段中获取内容:

 var returnedValue = document.getElementById("SeatCount").textContent;

我想知道我是否可以使用Xpath或更好的'Minimal Xpath'来实现类似的东西(我不知道'minimal xpath'是否有更具体的名称,该格式是通过?)

是否可以使用xpath选项获取相关的textcontent?如果是这样,怎么样?

1 个答案:

答案 0 :(得分:3)

标记为“XPath”的路径表示要从根节点选择的一系列步骤的元素的绝对位置路径。它基于位置谓词,这意味着如果您在文件结构中添加或删除任何内容,它的位置路径可能会发生变化。

名为“Minimal XPath”的路径是一个使用* descendant-or-self的表达式。它也从根节点开始,但匹配整个文件中具有{的任何元素{1}}属性包含值id。这通常更好,因为您不依赖于文件结构,SeatCount可以保证您正在检索唯一结果。

您可以使用id功能在JavaScript中使用XPath进行选择。例如:

evaluate

更正:我在上面的答案中替换了节点中的结果并更改了节点类型常量。正如@MartinHonnen正确观察到的那样,var result = document.evaluate('//*[@id="SeatCount"]', document, null, XPathResult.ANY_UNORDERED_NODE_TYPE, null ); 不会返回一个节点,而是一个可以从中提取节点的对象。在您的情况下,由于您只有一个结果,因此可以使用evaluate()来获取该节点。如果您的节点包含文本内容,则可以使用以下命令检索该内容:

singleNodeValue

请参阅MDN: XPath JavaScript documentationMDN: Using XPath