对于arXiv元数据,Xpath返回null

时间:2015-04-11 09:31:15

标签: xml xpath

我目前正在尝试解析arXiv中的一些数据。我能够以xml格式获取数据,但现在我无法选择某些元素。

例如,我想从这个xml文件中获取所有作者

http://export.arxiv.org/oai2?verb=ListRecords&set=physics:hep-th&from=2015-03-30&until=2015-03-31&metadataPrefix=arXivRaw

xpath查询

//authors

或类似的查询总是返回零。如何解决这个问题的任何想法都会很棒

3 个答案:

答案 0 :(得分:2)

<authors>个节点位于默认命名空间 xmlns="http://arxiv.org/OAI/arXivRaw/"中,该节点在<arXivRaw>节点级别声明。

许多XPath平台(编程语言API或其他类型的XPath工具)提供了一种将命名空间前缀映射到相应的命名空间URI的方法。在这种情况下,您需要注册一个指向"http://arxiv.org/OAI/arXivRaw/"的前缀,并在XPath中使用该前缀。例如,假设已注册的前缀名为d

//d:authors

但是如果没办法,你可以使用Xpath local-name()namespace-uri()的组合:

//*[local-name()='authors' and namespace-uri()='http://arxiv.org/OAI/arXivRaw/']

或者为了简单起见,可能只是忽略名称空间*:

//*[local-name()='authors']

*)如果有多个节点具有相同的本地名称但名称空间不同

,则存在获取错误节点的风险

答案 1 :(得分:0)

我怀疑你遇到了名称空间问题。难点在于您所追求的元素可能被称为authors,但它存在于特定于arXiv的命名空间中。你必须考虑到这一点来调整XPath表达式。

答案 2 :(得分:-1)

我认为问题来自两个命名空间的声明,但没有前缀,因此使用//authors将尝试使用默认命名空间找到它,因此不返回任何结果。

试试这个:

/OAI-PMH/ListRecords/record/metadata/arXivRaw/authors