我从Uniprot蛋白质数据库下载了以下xml文件。
protein <- xmlRoot(xmlTreeParse("http://www.uniprot.org/uniprot/Q01974.xml"))
从众多注释功能中,我对存储在以下xml节点中的激酶域的起始位置和结束位置感兴趣:
<feature type="domain" description="Protein kinase">
<location>
<begin position="288"/>
<end position="539"/>
</location>
</feature>
使用getNodeSet,我可以很好地找到这个标签:
getNodeSet(protein, "//uniprot:feature[@type=\"domain\" and @description=\"Protein kinase\"]", c(uniprot="http://uniprot.org/uniprot"))
不幸的是我无法缩小查询范围,添加任何其他条件都会返回一个空列表。例如:
getNodeSet(protein, "//uniprot:feature[@type=\"domain\" and @description=\"Protein kinase\"]/location", c(uniprot="http://uniprot.org/uniprot"))
基于在线xpath测试器,应该是有效的xpath查询,但返回空:
list()
attr(,"class")
[1] "XMLNodeSet"
有人可以帮我这个查询吗? 我确信这是getNodeSet的正常行为,但我不知道它背后的理性是什么。 一般来说,在R中用短语表达这种相对复杂的查询的最合适方法是什么?我应该存储结果然后进一步缩小范围吗?
非常感谢!
答案 0 :(得分:2)
也为后续元素使用相同的前缀:
//uniprot:feature[...]/uniprot:location
prefix + local-name
标识每个元素。如果您使用带有默认命名空间的XML(似乎这就是您所拥有的),则在默认命名空间中考虑所有不带前缀的元素。这就是为什么你需要为XPath中的每个元素使用前缀* 的原因(不仅仅是第一个元素)。
*)指向默认命名空间URI的前缀