簡體   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