首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用XML2包解析XML文件的子路径

如何使用XML2包解析XML文件的子路径
EN

Stack Overflow用户
提问于 2018-07-03 03:31:01
回答 2查看 377关注 0票数 3

下面的xml页面如下所示,需要使用xml2进行解析

但是,使用这段代码,我无法获得subcellularLocation xpath下面的列表:

代码语言:javascript
复制
library(xml2)
xmlfile <- "https://www.uniprot.org/uniprot/P09429.xml"

doc <- xmlfile %>%
  xml2::read_xml()

xml_name(doc)
xml_children(doc)
x <- xml_find_all(doc, "//subcellularLocation")
xml_path(x)
# character(0)

正确的方法是什么?

更新

代码语言:javascript
复制
The desired output is a vector:

[1] "Nucleus"                                                   
[2] "Chromosome"                                                
[3] "Cytoplasm"                                                 
[4] "Secreted"                                                  
[5] "Cell membrane"
[6] "Peripheral membrane protein" 
[7] "Extracellular side"
[8] "Endosome"                                                  
[9] "Endoplasmic reticulum-Golgi intermediate compartment"  
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-03 05:04:36

使用x <- xml_find_all(doc, "//d1:subcellularLocation")

每当遇到麻烦的问题时,首先检查文档,使用?xml_find_all,您将看到这个(在页面的末尾)。

代码语言:javascript
复制
# Namespaces ---------------------------------------------------------------
# If the document uses namespaces, you'll need use xml_ns to form
# a unique mapping between full namespace url and a short prefix
x <- read_xml('
 <root xmlns:f = "http://foo.com" xmlns:g = "http://bar.com">
   <f:doc><g:baz /></f:doc>
   <f:doc><g:baz /></f:doc>
 </root>
')
xml_find_all(x, ".//f:doc")
xml_find_all(x, ".//f:doc", xml_ns(x))

然后你去检查xml_ns(doc)并找到

代码语言:javascript
复制
d1  <-> http://uniprot.org/uniprot
xsi <-> http://www.w3.org/2001/XMLSchema-instance

更新

代码语言:javascript
复制
xml_find_all(doc, "//d1:subcellularLocation")
   %>% xml_children()
   %>% xml_text()

## [1] "Nucleus"                                             
## [2] "Chromosome"                                          
## [3] "Cytoplasm"                                           
## [4] "Secreted"                                            
## [5] "Cell membrane"                                       
## [6] "Peripheral membrane protein"                         
## [7] "Extracellular side"                                  
## [8] "Endosome"                                            
## [9] "Endoplasmic reticulum-Golgi intermediate compartment"ent"
票数 2
EN

Stack Overflow用户

发布于 2018-07-03 04:56:03

如果您不介意,可以使用rvest包:

代码语言:javascript
复制
library(rvest)
a=read_html(xmlfile)%>%
   html_nodes("subcellularlocation")

a%>%html_children()%>%html_text()

[1] "Nucleus"                                              "Chromosome"                                          
[3] "Cytoplasm"                                            "Secreted"                                            
[5] "Cell membrane"                                        "Peripheral membrane protein"                         
[7] "Extracellular side"                                   "Endosome"                                            
[9] "Endoplasmic reticulum-Golgi intermediate compartment"
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51146288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档