我使用R中的xml包来解析XML文档(下面的代码段)。
xml片段:
<notes>
<body xml="http://www.books.xhtml">
<p> System: Mighty</p>
<p>Confidence Level: </p>
</body>
</notes>
我想选择System:Mighty部分,如果可能的话,甚至只选择Mighty部分。到目前为止我的代码:
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 :(得分: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"
你可以在xml_find_all
中使用更强大的XPath做更多事情,但这种方法很容易编写和阅读。如果这实际上是HTML,你可以使用rvest而不是xml2;两者都很好。