Как l oop через xml узлов в R - PullRequest
       29

Как l oop через xml узлов в R

0 голосов
/ 24 апреля 2020

У меня есть требование разбить документ xml на несколько узлов; а затем разбить каждый узел отдельно на несколько подузлов. Я использую функции xpathSApply / getNodeSet в пакете XML. Но похоже, что как только документ xml разделен на узлы, каждый узел теперь рассматривается как класс «внутренний узел» и, следовательно, не может выполнять над ним операции spath, если мы не сохраним его как xml, используя save XML (). , Любые идеи о том, как это может быть достигнуто без необходимости делать SAVE XML? Например, рассмотрим пример xml ниже:

<array>
<ResidentialProperty>
    <Listing>
      <StreetAddress>
        <StreetNumber>11111</StreetNumber>
        <StreetName>111th</StreetName>
        <StreetSuffix>Avenue Ct</StreetSuffix>
        <StateOrProvince>WA</StateOrProvince>
      </StreetAddress>
      <MLSInformation>
        <ListingStatus Status="Active"/>
        <StatusChangeDate>2015-07-05T23:48:53.410</StatusChangeDate>
      </MLSInformation>
      <GeographicData>
        <Latitude>11.111111</Latitude>
        <Longitude>-111.111111</Longitude>
        <County>Pierce</County>
      </GeographicData>
</ResidentialProperty>
<ResidentialProperty>
    <Listing>
      <StreetAddress>
        <StreetNumber>11211</StreetNumber>
        <StreetName>11111334th</StreetName>
        <StreetSuffix>Av1enue Ct</StreetSuffix>
        <StateOrProvince>WA</StateOrProvince>
      </StreetAddress>
      <MLSInformation>
        <ListingStatus Status="Active"/>
        <StatusChangeDate>2017-07-05T23:48:53.410</StatusChangeDate>
      </MLSInformation>
      <GeographicData>
        <Latitude>11.111111</Latitude>
        <Longitude>-111.111111</Longitude>
        <County>Pie2rce</County>
      </GeographicData>
</ResidentialProperty>
</array>

Я собираюсь разделить вышеперечисленное на: 1. Два отдельных узла с root ResidentialProperty 2. Затем можно выполнять операции XPATH на каждом из эти узлы.

PS: Это примерные данные, которые не похожи на фактический набор данных, с которым я работаю. Просто попытался использовать это, чтобы объяснить проблему, которую я пытаюсь решить.

1 Ответ

0 голосов
/ 24 апреля 2020

РЕДАКТИРОВАТЬ: Я думаю, что я неправильно понял вопрос. Новый подход.

Мы используем xpathApply, toString.XMLNode и xmlParseString для извлечения указанных c узлов в 2 объектах.

Разбор файла XML и извлечение узлов:

library(XML) :
doc=xmlParse("pathtoyourXML.xml")
result1=xmlParseString(toString.XMLNode(xpathApply(doc,"(//ResidentialProperty)[1]")))
result2=xmlParseString(toString.XMLNode(xpathApply(doc,"(//ResidentialProperty)[2]")))

У нас есть 2 объекта, мы оцениваем их следующим образом:

from.result1=xpathApply(result1,"//StreetAddress")
from.result2=xpathApply(result2,"//StreetAddress")

Sidenote: ваш XML недействителен. Элементы листингов не закрыты.

РЕДАКТИРОВАТЬ 2: Фактически, вы можете использовать XPathApply на ранее «извлеченном» наборе узлов:

foo=xpathApply(doc,"(//ResidentialProperty)[2]")
xpathApply(foo[[1]],"//StreetAddress")

foo не содержит результат предыдущего Выражение xpath ((//ResidentialProperty)[2]), но весь набор узлов XML.

...