r - 识别 xml 文件的唯一属性
问题描述
我需要识别 xml 文件的所有唯一属性以正确地将 xml 转换为数据框。
以下 R 脚本允许进行转换。但前提是属性是已知的。
library(rvest)
library(magrittr)
xml <- read_xml('<?xml version="1.0" encoding="UTF-8"?>
<movies>
<movie Id="1" Name="Movie 1" IMDB="8,4" Date="2008-07-31T00:00:00.000" Views="649" />
<movie Id="2" Name="Movie 2" IMDB="3,7" Location="El Cerrito, CA" Actor="Tom Hanks" />
</movies>')
movies <- xml %>% xml_nodes("movie")
data.frame(
Id = movies %>% xml_attr("Id"),
Name = movies %>% xml_attr("Name"),
IMDB = movies %>% xml_attr("IMDB"),
Date = movies %>% xml_attr("Date"),
Views = movies %>% xml_attr("Views"),
Location = movies %>% xml_attr("Location"),
Actor = movies %>% xml_attr("Actor")
)
输出将如下所示:
Id Name IMDB Date Views Location Actor
1 1 Movie 1 8,4 2008-07-31T00:00:00.000 649 <NA> <NA>
2 2 Movie 2 3,7 <NA> <NA> El Cerrito, CA Tom Hanks
如何获得所有唯一属性的列表(实际数据太长,无法手动检查)?
对于此示例,所需的输出应类似于以下列表:
[1] "Id"
[2] "Name"
[3] "IMDB"
[4] "Date"
[5] "Views"
[6] "Location"
[7] "Actor"
解决方案
使用您的数据:
Sample = '<?xml version="1.0" encoding="UTF-8"?>
<movies>
<movie Id="1" Name="Movie 1" IMDB="8,4" Date="2008-07-31T00:00:00.000" Views="649" />
<movie Id="2" Name="Movie 2" IMDB="3,7" Location="El Cerrito, CA" Actor="Tom Hanks" />
</movies>'
您可以从包和正则表达式str_extract_all
中获得您想要的大部分内容。stringr
至少正如我所做的那样,您需要清理虚假的 = 符号,然后使用unique
它来消除重复项。
unique(sub("=", "", str_extract_all(Sample, "\\w+=")[[1]]))
[1] "version" "encoding" "Id" "Name" "IMDB" "Date" "Views"
[8] "Location" "Actor"
如果您不想在标题中包含“编码”标签,您可以运行
Sample = sub(".*(<movies.*?</movies>).*", "\\1", Sample)
首先只选择有电影的部分。
推荐阅读
- java - Android Studio 中的渐变
- javascript - react-native 是否有任何安全存储或安全本地数据库?
- c++ - 模板头文件的编译器设置
- python - 是否可以在 2D 坐标上进行 ARIMA 时间序列预测?
- python - 如何根据 Kivy 中子项的大小更新父小部件的大小?
- node.js - 如何修复'401 Unauthorized' Passport-jwt + Angular?
- html - 如何将 rel="nofollow" 添加到简码
- android - Android BottomNavigationView 与 Recyclerview 重叠
- android - 如何以编程方式在 Android 中启用 USB OTG?
- javascript - JS函数作用域和提升