繁体   English   中英

R中的data.frame有多个XML属性

[英]Multiple XML attributes to data.frame in R

我正在尝试学习R的XML包。 我正在尝试从下面的XML文件创建仅具有某些属性(calendar-startdate,starttime,title)的data.frame:

    <?xml version="1.0" encoding="UTF-8"?>
<TRANSMISSIONS xsi:noNamespaceSchemaLocation="C:/WhatsOn/EP22D5~1.XSD" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Transmission>
<Transmission_details tx-id="49498536812" channel="PRIME Star" calendar-startdate="2015-03-01" broadcast-startdate="2015-03-01" starttime="08:00" endtime="09:20" rerun="true" live="false" runnumber="28" />
<Program>
<Program_Details content-id="TN00030640/00/0000" version="DVNL" title="Super Buddies" productionyear="2013" productioncountry="UNITED STATES" category="Familiefilm" synopsis1="(Nederlands gesproken) Humor, actie en geweldige nieuwe personages in een nieuw Disney-avontuur waarin een nieuw ras superhelden wordt geboren. Van de makers van 'Air Buddies', 'Snow Buddies', 'Santa Buddies' en 'Spooky Buddies'.&#xA;&#xA;&#xA;Een gewone dag op de Fernfield boerderij wordt bijzonder wanneer Budderball, Mudbud, B-Dawg, Buddha en Rosebud mysterieuze ringen ontdekken die hun elk een unieke superkracht geven. Nog voor je kunt zeggen 'Buddies, verzamelen', gebruiken de puppies hun geweldige gaven en komen in actie wanneer een gedaanteverwisselende pestkop uit de ruimte de aarde bedreigt. Maar zal het ze lukken om de boel te redden zonder hun nieuwe identiteiten te onthullen?" synopsis3="(Nederlands gesproken) Humor, actie en geweldige nieuwe personages in een nieuw Disney-avontuur waarin een nieuw ras superhelden wordt geboren. Van de makers van 'Air Buddies', 'Snow Buddies', 'Santa Buddies' en 'Spooky Buddies'.&#xA;&#xA;&#xA;Een gewone dag op de Fernfield boerderij wordt bijzonder wanneer Budderball, Mudbud, B-Dawg, Buddha en Rosebud mysterieuze ringen ontdekken die hun elk een unieke superkracht geven. Nog voor je kunt zeggen 'Buddies, verzamelen', gebruiken de puppies hun geweldige gaven en komen in actie wanneer een gedaanteverwisselende pestkop uit de ruimte de aarde bedreigt. Maar zal het ze lukken om de boel te redden zonder hun nieuwe identiteiten te onthullen?" vodcrid="crid://telenet.be/AA/TN00030640_00_0000-DVNL-HD">
</Program_Details>
<Viewing_Info kw_violence="false" kw_drugs="false" kw_language="false" kw_sex="false" kw_fear="false" kw_discrimination="false">
</Viewing_Info>
<Crew>
<Crewmember Fullname="Robert Vince" Function="Director" />
</Crew>
</Program>
</Transmission>
<Transmission>
<Transmission_details tx-id="45574036812" channel="PRIME Star" calendar-startdate="2015-03-01" broadcast-startdate="2015-03-01" starttime="09:20" endtime="11:00" rerun="true" live="false" runnumber="11" />
<Program>
<Program_Details content-id="TN00030706/00/0000" version="OSNL" title="Until She Came Along" productionyear="2013" productioncountry="UNITED STATES" category="Romantische film " synopsis1="Romantische komedie van de regisseur van 'The Castle' en 'The Dish', met Josh Lawson ('Freeloaders', tv-serie 'House of Lies') en Rachael Taylor ('The Darkest Hour', 'Transformers').&#xA;&#xA;&#xA;Twintiger Ben heeft het helemaal voor elkaar: een geslaagde carrière, vrienden, feesten, mooie vrouwen, en geen verplichtingen. Maar hoewel zijn mannelijke vrienden bijna allemaal jaloers op hem zijn, voelt zijn leven niet compleet. Als hij op een dag een lezing moet houden op zijn oude school, loopt hij zijn vroegere klasgenote Alex tegen het lijf. Vanaf dat moment begint Ben vraagtekens te plaatsen bij zijn bestaan. Een jaar lang gaat hij op zoek naar zichzelf en wat hij nu eigenlijk wil. En dan pas wordt hij zich bewust van de mogelijkheid dat de zin van het leven schuilt in de dingen die hij altijd al doet en dat het enige ontbrekende stukje van de puzzel misschien wel dat meisje uit zijn jeugd is." synopsis3="Romantische komedie van de regisseur van 'The Castle' en 'The Dish', met Josh Lawson ('Freeloaders', tv-serie 'House of Lies') en Rachael Taylor ('The Darkest Hour', 'Transformers').&#xA;&#xA;&#xA;Twintiger Ben heeft het helemaal voor elkaar: een geslaagde carrière, vrienden, feesten, mooie vrouwen, en geen verplichtingen. Maar hoewel zijn mannelijke vrienden bijna allemaal jaloers op hem zijn, voelt zijn leven niet compleet. Als hij op een dag een lezing moet houden op zijn oude school, loopt hij zijn vroegere klasgenote Alex tegen het lijf. Vanaf dat moment begint Ben vraagtekens te plaatsen bij zijn bestaan. Een jaar lang gaat hij op zoek naar zichzelf en wat hij nu eigenlijk wil. En dan pas wordt hij zich bewust van de mogelijkheid dat de zin van het leven schuilt in de dingen die hij altijd al doet en dat het enige ontbrekende stukje van de puzzel misschien wel dat meisje uit zijn jeugd is." vodcrid="crid://telenet.be/AA/TN00030706_00_0000-OSNL-HD-2">
</Program_Details>
<Viewing_Info parentalrating="12" kw_violence="false" kw_drugs="false" kw_language="true" kw_sex="false" kw_fear="false" kw_discrimination="false">
</Viewing_Info>
<Crew>
<Crewmember Fullname="Rob Stich" Function="Director" />
<Crewmember Fullname="Josh Lawson" Function="Actor" />
<Crewmember Fullname="Rachael Taylor" Function="Actor" />
<Crewmember Fullname="Daniel Henshall" Function="Actor" />
</Crew>
</Program>
</Transmission>
</TRANSMISSIONS>

最终输出将是这样的:

calendar-startdate| starttime | title
2015-03-01|08:00|Super Buddies
2015-03-01|09:20|Until She Came Along

我找不到任何可用于解决此问题的示例(具有多个属性)。 感谢您对如何仅提取某些属性并创建data.frame的任何意见或建议。 非常感谢您的时间和帮助。

使用本文中回答的Scott提供的解决方案, R XML从同一节点xmlAttrs()中选择了2个属性 ,我找到了一个快速而肮脏的解决方案。

doc <- xmlParse("xml file above")
dum1=as.data.frame(sapply(c("calendar-startdate", 'starttime'), function(x) xpathSApply(doc, '//Transmission_details',  xmlGetAttr, x)))
dum2=as.data.frame(sapply(c("title"), function(x) xpathSApply(doc, '//Program_Details',  xmlGetAttr, x)))
dum=cbind(dum1,dum2)

我敢肯定还有另一种更优雅的方法!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM