Я использую последнюю версию R, 3.2.1, с пакетом XML
, чтобы попытаться прочитать XML-файл и преобразовать его в фрейм данных. Я новичок в xml, но имею небольшой опыт работы с R. Мой xml-файл находится в следующем формате.Проблема с чтением XML с помощью R
<?xml version="1.0" encoding="UTF-8"?>
<campusRoot>
<Header baseURL="https://url" date="date" time="time" calendarCookie="0" calendarScope="0">
<Param name="x" value="adhoc.AdHocFilter-listAdhocData"/>
<Param name="filterID" value="num"/>
<Param name="calendarID" value="0"/>
<Param name="source" value="live"/>
<Param name="saveAs" value="extract.xml"/>
<User userID="number" username="user" >
<financeAccountAccessRights/>
<financeAccountReportRights/>
<userGroups>
<UserGroup groupID="num" name="Ad Hoc" isSecurityRole="false" addContent="true" lock="false"/>
</userGroups>
</User>
</Header>
<ExportWizard>
<DisplayPreferences>
<Field name="sch.number" attribute="sch.number" type="varchar" nooutput="false" seq="" sortOrder="" sortDirection="" alignment="" formatting="" size=""/>
<Field name="sch.name" attribute="sch.name" type="varchar" nooutput="false" seq="" sortOrder="" sortDirection="" alignment="" formatting="" size=""/>
<Field name="sch.type" attribute="sch.type" type="varchar" nooutput="false" seq="" sortOrder="" sortDirection="" alignment="" formatting="" size=""/>
<Field name="sch.comments" attribute="sch.comments" type="varchar" nooutput="false" seq="" sortOrder="" sortDirection="" alignment="" formatting="" size=""/>
<Field name="sch.schoolID" attribute="sch.schoolID" type="int" nooutput="false" seq="" sortOrder="" sortDirection="" alignment="" formatting="" size=""/>
<Field name="student.grade" attribute="student.grade" type="varchar" nooutput="false" seq="" sortOrder="" sortDirection="" alignment="" formatting="" size=""/>
</DisplayPreferences>
<Extract name="00_Schools">
<group tier="0" groupBy="All" groupSort="ASC" value="Records" adHocRowLimit="5000000" dataColumns="6">
<student sch.number="1234" sch.name="name" sch.type="AAA" sch.comments="" sch.schoolID="00" student.grade="00"/>
<student sch.number="1234" sch.name="name" sch.type="AAA" sch.comments="" sch.schoolID="00" student.grade="00"/>
<student sch.number="1234" sch.name="name" sch.type="AAA" sch.comments="" sch.schoolID="00" student.grade="00"/>
<student sch.number="1234" sch.name="name" sch.type="AAA" sch.comments="" sch.schoolID="00" student.grade="00"/>
<student sch.number="1234" sch.name="name" sch.type="AAA" sch.comments="Middle" sch.schoolID="00" student.grade="00"/>
<student sch.number="1234" sch.name="name" sch.type="AAA" sch.comments="" sch.schoolID="00" student.grade="00"/>
</group>
</Extract>
</ExportWizard>
</campusRoot>
Я пытаюсь получить данные студентов в кадр данных с именами столбцов «sch.number», «sch.name», «sch.type», «sch.comments», «сч. schoolID "и" student.grade ". Я попытался использовать следующий код для извлечения данных студента.
data <- xmlParse("xmlfile.xml", useInternalNodes = FALSE)
root <- xmlRoot(data)
После этого я могу перейти к первой строке данных с помощью этого кода.
root[[2]][[2]][[1]][[1]]
Когда я пытаюсь получить значения для каждой строки с помощью функции xmlValue()
, я не получаю значения обратно.
> xmlValue(root[[2]][[2]][[1]][[1]])
character(0)
Я не уверен, как я должен прокручивать данные, чтобы я мог извлечь данные в фрейм данных. Я попытался посмотреть другие примеры, но не могу найти пример, где данные находятся внутри тега. Большинство примеров показывают данные между двумя тегами. Любые предложения о том, что я должен делать?
Я хотел бы, результат будет следующий кадр данных:
sch.number sch.name sch.type sch.comments sch.schooID student.grade
1234 name AAA NA 00 00
1234 name AAA NA 00 00
1234 name AAA NA 00 00
1234 name AAA NA 00 00
1234 name AAA Middle 00 00
1234 name AAA NA 00 00
Ваши узлы не имеют какой-либо текст в них так, что нет ничего для 'xmlValue' вернуться. Какие значения вы пытаетесь извлечь? Вы говорите об атрибутах? Какова ваша ожидаемая возвращаемая стоимость. – MrFlick