我目前正在尝试解析arXiv中的一些数据。我能够以xml格式获取数据,但现在我无法选择某些元素。
例如,我想从这个xml文件中获取所有作者
xpath查询
//authors
或类似的查询总是返回零。如何解决这个问题的任何想法都会很棒
答案 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