r - 当信息在使用R的括号内时,如何解析XML文件的特定信息?
问题描述
我正在使用 R,并且正在尝试将 XML 文件中的信息解析为 DataFrame。问题是,当信息在这样的括号之间时,我知道该怎么做:
<Person><Name> Marcos </Name></Person>
但是我正在使用的 XML 在括号内包含信息,作为属性:
<Games timestamp="2017-08-29T15:26:24">
<Game id="942799" away_score="0" away_team_id="449" away_team_name="Villarreal" competition_id="23" competition_name="Spanish La Liga" game_date="2017-08-21T19:15:00" home_score="1" home_team_id="855" home_team_name="Levante" matchday="1" period_1_start="2017-08-21T19:15:40" period_2_start="2017-08-21T20:18:02" season_id="2017" season_name="Season 2017/2018">
<Event id="1615184504" event_id="1" type_id="34" period_id="16" min="0" sec="0" team_id="855" outcome="1" x="0.0" y="0.0" timestamp="2017-08-21T18:10:10.82" last_modified="2017-08-21T19:16:17" version="1503339377339">
<Q id="2065887850" qualifier_id="227" value="0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0" />
<Q id="2021905255" qualifier_id="30" value="49214, 105525, 77039, 152551, 90400, 169201, 88952, 196739, 91953, 163784, 165375, 78323, 54224, 49442, 181859, 42844, 194764, 83564" />
<Q id="1295835216" qualifier_id="59" value="1, 2, 3, 8, 15, 6, 24, 10, 17, 23, 11, 5, 7, 13, 14, 19, 21, 22" />
<Q id="1289404134" qualifier_id="44" value="1, 2, 2, 3, 2, 2, 3, 3, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5" />
<Q id="1475702012" qualifier_id="130" value="4" />
<Q id="1510724498" qualifier_id="197" value="1584" />
<Q id="1735470938" qualifier_id="194" value="165375" />
<Q id="1307709006" qualifier_id="131" value="1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0, 0, 0, 0, 0, 0, 0" />
</Event>
</Game>
</Games>
你能帮我处理这些信息吗?例如,我需要提取 qualifier_id 和值。
提前致谢。
解决方案
我最近才意识到可以使用XML库简单地传递一个XPath 字符串来进行选择并返回所有值的列表。例如:
library(XML)
x <- xmlInternalTreeParse("file.xml")
x["//Games//Event//Q//@qualifier_id"]
x["//Games//Event//Q//@value"]
str(x["//Games//Event//Q//@qualifier_id"])
#List of 8
# $ :Class 'XMLAttributeValue' Named chr "227"
# .. ..- attr(*, "names")= chr "qualifier_id"
# $ :Class 'XMLAttributeValue' Named chr "30"
# .. ..- attr(*, "names")= chr "qualifier_id"
#...
推荐阅读
- excel - 用于查找特定类别的差异总和的公式
- c# - 边缘原生消息传递 - 可以向一个请求发送更多响应吗?
- jenkins - 如何禁用 kubernetes Jenkins 插件的代理缓存?
- javascript - 更新状态时如何立即更新道具?
- angular - 如何解决 Angular 项目生成问题
- mysql - Mysql - 根据月份日期合并两个表
- javascript - 由于推送 ID,无法将 Firebase 列表数据附加到 html 表
- php - 奏鸣曲管理员编辑表单而不是实体的 ValueObject
- phpstorm - PhpStorm 2019.1 中缺少创建命令行启动器
- c# - 如何在不使用“文件下载”对话框的情况下使用 WebBrowser 控件下载文件?