2017-04-25 66 views
0

我在R中使用xml包來解析XML文檔(下面的代碼片段)。在R中解析具有相同名稱的特定XML元素

XML片段:

<notes> 
    <body xml="http://www.books.xhtml"> 
     <p> System: Mighty</p> 
     <p>Confidence Level: </p> 
    </body> 
    </notes> 

我想只要選擇系統:強大部分,甚至只是全能的一部分,如果可能的。我的代碼到目前爲止:

data <- xmlParse("abc.xml") 
out_p <- getNodeSet(data, "//*[name()='p']", fun=xmlToList) 

這會導致所有p元素的長列表。系統和信心水平包括在內。我試圖玩弄編輯我的代碼只選擇系統的元素,都沒有成功:

out_p <- getNodeSet(data, "//*p[attribute()[contains.,"SYSTEM"]", fun=xmlToList) ## doesn't work 

什麼是排除信譽度元素的正確方法是什麼?提前致謝!!

回答

0

使用XML2:

library(xml2) 
library(magrittr) 

xml <- ' <notes> 
    <body xml="http://www.books.xhtml"> 
     <p> System: Mighty</p> 
     <p>Confidence Level: </p> 
    </body> 
    </notes>' 

xml %>% read_xml() %>% 
    xml_find_all('//p') %>% # select p elements 
    xml_text() %>% # get node text 
    grep('System:', ., value = TRUE) %>% # select only matching text 
    sub(' System: ', '', .) # clean text 
#> [1] "Mighty" 

你可以做一些更激烈的XPath做多xml_find_all,但這種方法容易編寫和閱讀。如果這實際上是HTML,則可以使用rvest而不是xml2;兩者都很好。

相關問題