xml - 在 R 中解析具有重复元素名称的 XML

标签 xml r

我正在尝试使用 R 解析 Eve Killlog 数据,但在提取数据时遇到了问题,因为该文件在一次 Kill 中重复使用相同的行集标记。

这是 XML 的摘录(完整示例已找到 here):

  <rowset name="kills" key="killID" columns="killID,solarSystemID,killTime,moonID">
  <row killID="63" solarSystemID="30000848" killTime="2007-11-15 15:36:00" moonID="0">
    <victim characterID="150340823" characterName="Dieinafire" corporationID="1000169"
            corporationName="Center for Advanced Studies" allianceID="0"
            allianceName="" factionID="0" factionName=""
            damageTaken="6378" shipTypeID="12003" />
    <rowset name="attackers" columns="characterID,characterName,corporationID,corporationName,allianceID,allianceName,
            factionID,factionName,securityStatus,damageDone,finalBlow,weaponTypeID,shipTypeID">
      <row characterID="0" characterName="" corporationID="1000127" corporationName="Guristas"
           allianceID="0" allianceName="" factionID="0" factionName="" securityStatus="0" 
           damageDone="6313" finalBlow="1" weaponTypeID="0" shipTypeID="203" />
      <row characterID="0" characterName="" corporationID="150279367" corporationName="Starbase Anchoring Corp"
           allianceID="0" allianceName="" securityStatus="0" damageDone="65" finalBlow="0"
           weaponTypeID="0" shipTypeID="16632" />
    </rowset>

我的目标是每次击杀都能得到这样的东西:

killID               63
solarSystemID        30000848 
victim characterID   Dieinafire
attacker characterID ""
attacker characterID ""

我可以这样提取受害者信息:

xpathSApply(xmlFile, "//victim", xmlGetAttr, 'characterName')

因为只有一名受害者,但我不知道如何提取攻击者信息。我试过这个:

xpathSApply(xmlFile, "//rowset/row/", xmlGetAttr, 'characterName')

但我收到了很多空回复。有人可以建议一种干净的方法来提取每次杀戮的攻击者信息吗?

最佳答案

你可以试试这个,我在整个 XML 上运行它,而不是摘录:

#finds nodes that have a `killID` attribute
data<-t(xpathSApply(xmlFile,"//row[@killID]",function(x){
  #gets the killI
  killID<-xpathSApply(x, ".", xmlGetAttr, 'killID')
  #gets the victimName
  victimName<-xpathSApply(x, "./victim", xmlGetAttr, 'characterName')
  #gets the attackers and pastes them together
  attackersId<-paste0(getNodeSet(x,"rowset[@name='attackers']/row/@characterID"),collapse=",")
  return(list(killID,victimName,attackersId))
}
))
colnames(data)<-c("KillID","victimName","attackersID")
data

关于xml - 在 R 中解析具有重复元素名称的 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28466310/

相关文章:

r - 无法解决 Kaggle 内核中发生的 In h2o 错误

r - R中非列表类的继承?

r - 在数据帧 R 中取消嵌套数据帧

r - 在 R 中使用子集时如何忽略大小写

r - 根据 Shiny 仪表板中选择的选项卡面板隐藏和显示侧边栏

java - 如何确定给定字符串是否为 .xml 文件

.net - 将类的所有属性序列化为 XML

java - 如何在java中处理嵌套的xml文件?

xml - 属性的 ref 不适用于 Netbeans 下的复杂类型

python - 如何只抓取两个预定义的页面,但它们抓取不同的项目?