在有不同的节点数时解析XML

时间:2017-02-25 05:01:19

标签: r xml

我认为这个问题之前可能已被问过,但经过研究我无法找到任何结果。我是解析XML文档的新手。我试图解析一个看起来像这样的XML页面:

schedule = xmlParse("MYXML.XML")

# here's what schedule looks like
<all-games>
  <game-schedule gameid="1">
    <player name="Joe">
    <player name="Mike">
    <player name="Steve">
  </game-schedule>
  <game-schedule gameid="2">
    <player name="Rick">
    <player name="John">
    <player name="Karl">  
  </game-schedule>
</all-games>


# here's my code to parse the XML
my_df = data.frame(
  gameID = sapply(schedule["//game-schedule/@gameid"], as, "integer"),
  player = sapply(schedule["//game-schedule/player/@name"], as, "character")
)

但它并没有给我我想要的东西。我想解析数据帧,以便为游戏中的玩家数量重复gameID。也就是说,我试图获得以下数据帧:

my_df
    gameID    player
1        1       Joe
2        1      Mike
3        1     Steve
4        2      Rick
5        2      John
6        2      Karl

非常感谢任何帮助。看起来像我应该能够做的事情,因为我经常需要以这种方式解析XML。

2 个答案:

答案 0 :(得分:3)

考虑在XPath中使用节点索引迭代$.ajax({ type: "POST", url: "/Token", data: JSON.stringify(model), contentType: 'application/json', success: function (response) { var json = JSON.parse(response); localStorage.setItem("accesstoken", json["access_token"]); if (isTwoFactorRequired() != false) { localStorage.setItem("twofactorrequired", true); } window.location.href = "/Home/Index"; }, failure: function (errMsg) { } }); function isTwoFactorRequired() { if (localStorage.getItem("twofactorrequired") == false) { return false; } else { return true; } 个节点的长度:

for (int i=0; i>60; i++);

答案 1 :(得分:1)

这是在fill

中使用tidy的另一种方法
XML:::xmlAttrsToDataFrame(schedule["//all-games//*"]) %>% fill(gameid) %>% filter(!is.na(name)) 
  gameid  name
1      1   Joe
2      1  Mike
3      1 Steve
4      2  Rick
5      2  John
6      2  Karl