维基百科摘要上的XPath

维基百科摘要上的XPath,xpath,Xpath,我目前正在尝试使用XPath从任何给定的Wikipedia页面提取简介或摘要。现在,网上有很多地方已经这样做了: 但是,当我尝试在各种页面上使用类似的XPath表达式时,返回的结果很奇怪。为了回答这个问题,让我们假设我正在试图检索波士顿可打印维基百科页面的第一段: 当我尝试使用这个表达式/html/body/div[@id='content']]/div[@id='bodyContent']]//p时,只返回段落的最后四个单词(在美国) 实际上,上面使用的表达式可以简化为//div/p,但结果是

我目前正在尝试使用XPath从任何给定的Wikipedia页面提取简介或摘要。现在,网上有很多地方已经这样做了:

但是,当我尝试在各种页面上使用类似的XPath表达式时,返回的结果很奇怪。为了回答这个问题,让我们假设我正在试图检索波士顿可打印维基百科页面的第一段:

当我尝试使用这个表达式/html/body/div[@id='content']]/div[@id='bodyContent']]//p时,只返回段落的最后四个单词(在美国)

实际上,上面使用的表达式可以简化为//div/p,但结果是相同的

奇怪的是,我以前链接到的链接似乎使用了类似的方法并返回了很好的结果;起初,我认为这是由于维基百科近年来改变了他们页面的格式,但老实说,我似乎找不到这两种表达的错误之处

有人知道这件事吗

当我尝试使用这个表达式时 /html/body/div[@id='content']/div[@id='bodyContent']//p,只有 在美国,这一段的最后四个字是 返回

这里有几个问题:

XML文档位于默认名称空间中。编写XPath表达式以选择默认命名空间中文档中的节点是有关XPath的最常见问题解答—搜索XPath和默认命名空间。简而言之,任何不固定的名称都很可能导致不选择任何内容。必须注册默认名称空间并将特定前缀与此名称空间关联。然后XPath表达式中的任何元素名称都必须使用此前缀写入。因此,上述表达式将变为: : 其中x:前缀与http://www.w3.org/1999/xhtml 命名空间

.2。即使上面的表达式也不会只选择所需的节点。为了只从上面选择第一个x:p,必须将XPath表达式指定为括号:

.3。由于需要段落的文本,一种简单的方法是使用标准XPath函数字符串:

当计算这个XPath表达式时,我会得到段落的文本——例如,在几年前我编写的XPath可视化工具中:


你用什么来运行这些表达式?我正在用Objective-C为Mac开发,并使用XPathQuery库。但在这里,我认为问题更可能与我的表达和维基百科的内容有关。
/x:html/x:body/x:div[@id='content']/x:div[@id='bodyContent']//x:p
(/x:html/x:body/x:div[@id='content']/x:div[@id='bodyContent']//x:p)[1]
string((/x:html/x:body/x:div[@id='content']/x:div[@id='bodyContent']//x:p)[1])