r - 使用 r 按属性从 xml 获取值

标签 r xml

我正在尝试从 xml 中获取如下所示的值:

<data>
    <result name="r">
        <item>
            <str name="id">123</str>
            <str name="xxx">aaa</str>
        </item>
        <item>
            <str name="id">456</str>
            <str name="xxx">aaa</str>
        </item>
    </result>
</data>

到目前为止,我可以通过以下方式获取 id 值:
xmlfile <- xmlParse(url)
data <- xmlRoot(xmlfile) 
result <- xmltop[["result"]]
for (i in xmlSize(result)) {
  print(xmlValue(result[[i]][[1]]))
}

这似乎非常低效,并且仅当“id”存储在第一个子元素中时才有效。那么,有没有办法通过搜索属性( 123, 456 )和值( name )来获取元素的值( id )?

最佳答案

xml2 包非常适合解决此类问题。

library(xml2)
page<-read_xml('<data>
    <result name="r">
               <item>
               <str name="id">123</str>
               <str name="xxx">aaa</str>
               </item>
               <item>
               <str name="id">456</str>
               <str name="xxx">aaa</str>
               </item>
               </result>
               </data>')

#find all str nodes
 nodes<-xml_find_all(page, ".//str")
#filter out the nodes where the attribute name=id
 nodes<-nodes[xml_attr(nodes, "name")=="id"]
#get values (as character strings)
 xml_text(nodes)

这一切都可以在一行代码中完成,但为了清楚起见,这些步骤被分为三个。

关于r - 使用 r 按属性从 xml 获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45256789/

相关文章:

r - R 中的错​​误 : decompose(y) : time series has no or less than 2 periods

java - 让一个 View 覆盖android中的所有其他 View ?

xml - 使用 xPath 从表中获取特定数据

r - DST 前后的 POSIXct 时间?

r - 在另一个函数中定义函数的优雅方式

R Shiny - 连续后台任务

r - dplyr 重命名 "object not found"

java - 如何使用 Java 获取 xml 中元素的第 N 个父元素

java - XML 中命名空间对于 XML 解析器的工作和重要性

xml - 如何在 XML 中转义 "&"?