【发布时间】:2015-12-02 18:06:23
【问题描述】:
就在我以为我理解 XPath 的时候!我一定错过了一些非常简单的东西,但我无法在以下选择节点“citedby-count”的值:
xml <- "<?xml version='1.0' encoding='UTF-8'?>
<search-results xmlns='http://www.w3.org/2005/Atom' xmlns:cto='http://www.elsevier.com/xml/cto/dtd' xmlns:atom='http://www.w3.org/2005/Atom' xmlns:prism='http://prismstandard.org/namespaces/basic/2.0/' xmlns:opensearch='http://a9.com/-/spec/opensearch/1.1/' xmlns:dc='http://purl.org/dc/elements/1.1/'>
<entry>
<prism:url>http://api.elsevier.com/content/abstract/scopus_id/111111</prism:url>
<dc:title>Paper Title</dc:title>
<citedby-count>1</citedby-count>
</entry>
</search-results>"
doc <- xmlParse(xml)
我试过了
doc["//citedby-count"]
和
doc["//{'citedby-count'}"]
和
doc["//entry"]
但都返回
list()
attr(,"class")
[1] "XMLNodeSet"
然而,
doc["//dc:title"]
工作得很好。
我是不是看这个太久了?请帮忙!
**编辑:**我认为这是因为连字符,但不可能是因为
doc["//entry"]
也不行。
【问题讨论】:
-
doc["//atom:citedby-count", namespaces=c(atom="http://www.w3.org/2005/Atom")](处理 R 中的默认命名空间和类似 XML 的包是一件非常痛苦的事情) -
啊啊啊,谢谢!我已经使用这些文档好几个星期了,从来没有遇到过命名空间的问题。是什么让 atom 成为条目和被引用计数的命名空间?我以为我有点理解他们,但现在我完全困惑了
-
我刚刚创建了一个默认命名空间并将其命名为
atom。我把它称为fred或q。 XML pkg 将使用它来命名默认命名空间,然后您使用它来引用没有与它们关联的:命名空间的标签。 -
好的。那个实际的命名空间在 xml 中,所以我很困惑。我发现在我的代码中我可以使用 doc["//atom:citedby-count"] 得到相同的结果,是因为 atom 已经在根节点中了吗?
-
哦,伙计。我没有尝试过 :-) 我只是假设它在默认命名空间上很无聊(而且我没有阅读其余的内容以看到
atom在那里)。unlist(sapply(xmlNamespaces(doc), "[", "id"))显示 R 读入的所有内容。我不认为citedby-count是实际的 Atom NS 标签。这可能是一个“走运”的例子。