2015-11-08 2 views
0

У меня есть файл XML в R. Файл XML выглядит следующим образом:извлечение атрибутов XML и значений узла R

rootNode <- xmlRoot(xmlfile) 
rootNode[[1]] 

<pdv id="1000001" latitude="4620114" longitude="519791" cp="01000" pop="R"> 
    <adresse>ROUTE NATIONALE</adresse> 
    <ville>SAINT-DENIS-LèS-BOURG</ville> 
    <ouverture debut="01:00" fin="01:00" saufjour=""/> 
    <services> 
    <service>Automate CB</service> 
    <service>Vente de gaz domestique</service> 
    <service>Station de gonflage</service> 
    </services> 
    <prix nom="Gazole" id="1" maj="2014-01-02 11:08:03" valeur="1304"/> 
    <prix nom="SP98" id="6" maj="2014-12-31 08:39:46" valeur="1285"/> 
    <prix nom="Gazole" id="1" maj="2007-02-28 07:48:59.315736" valeur="999"/> 
    <fermeture/> 
    <rupture/> 
</pdv> 

в RootNode [[2]] является:

<pdv id="1000002" latitude="4621842" longitude="522767" cp="01000" pop="R"> 
    <adresse>16 Avenue de Marboz</adresse> 
    <ville>BOURG-EN-BRESSE</ville> 
    <ouverture debut="08:45" fin="19:30" saufjour="Dimanche"/> 
    <services> 
    <service>Automate CB</service> 
    <service>Vente de gaz domestique</service> 
    <service>Station de gonflage</service> 
    </services> 
    <prix nom="Gazole" id="1" maj="2007-01-02 08:34:29.101626" valeur="995"/> 
    <prix nom="Gazole" id="1" maj="2007-01-26 09:49:39.197356" valeur="977"/> 
    <fermeture/> 
    <rupture/> 
</pdv> 

и так на.

Я бег следующего кода, чтобы получить информацию о «оценщике»

valeur = xpathApply(rootNode, "//prix", xmlGetAttr, "valeur") 
valeur <- data.frame(matrix(unlist(valeur), byrow=T),stringsAsFactors=FALSE) 

На самом деле, я получаю значение «оценщика», но проблема: Я не могу определить, что три первые значения принадлежат rootNode [[1]], а последние два значения принадлежат rootNode [[2]] и т. д.

Как создать переменную, указывающую, что три первых значения принадлежат rootNode [[1]], а два других - rootNode [[2]]? или, по крайней мере, как я могу установить условие, которое просто приносит мне значения, принадлежащие rootNode [[1]]?

ответ

1

Это может быть не самое элегантное решение, но это единственное, что я смог придумать, столкнувшись с очень похожими проблемами.

Вот способ, чтобы добавить идентификатор из каждого узла PDV как атрибут для каждого-при подузле:

for (i in 1:xmlSize(rootNode)) {     

    id = xmlGetAttr(node = rootNode[[i]],  
        name = "id")     

    sapply(X = rootNode[[i]]["prix"],   
      fun = addAttributes,     
      id = id)         
} 

В зависимости от ваших потребностей, вы могли бы легко создать фрейм данных, соответствующий эти два значения:

data.frame (id  = xpathSApply(rootNode, "//prix", xmlGetAttr, "id"), 
      valeur = xpathSApply(rootNode, "//prix", xmlGetAttr, "valeur") 
) 

возвращающий:

 id valeur 
1 1000001 1304 
2 1000001 1285 
3 1000001 999 
4 1000002 995 
5 1000002 977 
Смежные вопросы