xml - 在 R 中,如何从 XML 文件中提取两个值,遍历 5603 个文件并写入表

标签 xml r parsing loops

由于我是 R 的新手,我正在尝试学习如何从 XML 文件中提取两个值并循环遍历我工作目录中的 5603 个其他(小的,<2kb)XML 文件。

我已经阅读了很多关于“循环”的主题,但发现这相当令人困惑 - 特别是因为循环 XML 文件似乎与循环其他文件不同,对吗?

我正在使用 XML 结构的在线数据。

对于每个 XML 文件,我想将“ZipCode”和“AwardAmount”写入表格。

运行以下代码我确实检索了 ZipCode 和 AwardAmount,但仅限于第一个文件。如何编写适当的循环并将其写入表?

xmlfiles=list.files(pattern="*.xml")
for (i in 1:length(xmlfiles)){
    doc= xmlTreeParse("xmlfiles[i]", useInternal=TRUE)
    zipcode<-xmlValue(doc[["//ZipCode"]])
    amount<-xmlValue(doc[["//AwardAmount"]])
}

有人有什么建议吗?

最佳答案

这可能对您有用。我摆脱了 for 循环并使用 sapply

xmlfiles <- list.files(pattern = "*.xml")
txtfiles <- gsub("xml", "txt", xmlfiles, fixed = TRUE)

txtfiles 是一组新文件名,用作每次运行的输出文件。

sapply(seq(xmlfiles), function(i){

  doc <- xmlTreeParse(xmlfiles[i], useInternal = TRUE)
  zipcode <- xmlValue(doc[["//ZipCode"]])
  amount <- xmlValue(doc[["//AwardAmount"]])
  DF <- data.frame(zip = zipcode, amount = amount)
  write.table(DF, quote = FALSE, row.names = FALSE, file = txtfiles[i])

})

如果您在运行时遇到问题,请告诉我。

关于xml - 在 R 中,如何从 XML 文件中提取两个值,遍历 5603 个文件并写入表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23377350/

相关文章:

r - 在 Shiny 中两次使用相同的输出元素

c++ - C++ 中的 Bencode 解析器

scala - 动态组合 Scala 的解析器组合子的函数是什么?

javascript - 如何通过 Node.js 从 xml 中检索 URL?

java - 如何在 android studio 中随机化图像?我写的代码不起作用

javascript - 忽略 XML 文件中的空 nodeValue

java - XMLStreamReader 如何使用相同类型的嵌套元素

r - 如何防止 Plotly 中的散点淡出?

macos - 在 Mac OS X 上运行 Rscript

javascript - Node.js 解析 fs.readFile() 时出现意外的数字转换