使用R从XML文件中提取属性时出现的问题

时间:2014-12-10 16:31:44

标签: xml r

我在尝试从XML文件中提取数据时遇到问题(数据存储为属性而不是元素,如果我是正确的话)。我在Windows 7上使用R 3.1.2和RStudio。

文件(缩写)如下所示:

<?xml version="1.0" encoding="ISO-8859-1" ?> 
<MensajePredicionesEolicas>
 <CodElemento Zona="Espana">
  <PotInstalada valor="22751000" /> 
   <FechaFichero valor="2014120907" /> 
   <Detalle>
    <FechaDato valor="2014-12-09">
     <HoraDato valor="7">
      <Prediccion valor="10588564" /> 
      <Percentil10 valor="9563875" /> 
      <Percentil90 valor="11435276" /> 
     </HoraDato>
     <HoraDato valor="8">
      <Prediccion valor="10269849" /> 
      <Percentil10 valor="8588400" /> 
      <Percentil90 valor="11623841" /> 
     </HoraDato>
     <HoraDato valor="9">
      <Prediccion valor="9823678" /> 
      <Percentil10 valor="7840628" /> 
      <Percentil90 valor="11536093" /> 
     </HoraDato>
    </FechaDato>
   </Detalle>
 </CodElemento>
</MensajePredicionesEolicas>        

例如,要提取我试过的atrribute FechaDato的值:

data <- xmlParse("file.xml")
date.pred.path <- "//CodElemento[@Zona='Espana']/Detalle/FechaDato"
date.pred <- sapply(data[date.pred.path], xmlGetAttr, "FechaDato")  

我正在获取空列表。有任何想法吗?

1 个答案:

答案 0 :(得分:0)

我认为XML解析器在到达CodElemento和之后Detalle时会感到困惑。但是,我设法通过应用xmlToList来提取信息。

xmlText <- c('<?xml version="1.0" encoding="ISO-8859-1" ?> 
<MensajePredicionesEolicas>
 ...
</MensajePredicionesEolicas>')

library(XML)

#Parse the XML
data  <- xmlTreeParse(xmlText)

#Access to the root element (MensajePredicionesEolicas)
MPE <- xmlRoot(doc)

#Access to CodElemento and apply xmlToList function to obtain the data
(MPE <- xmlApply(MPE,xmlToList))

结果:

$CodElemento
$CodElemento$PotInstalada
     valor 
"22751000" 

$CodElemento$FechaFichero
       valor 
"2014120907" 

$CodElemento$Detalle
       FechaDato   
       "10588564"  
       "9563875"   
       "11435276"  
       "7"         
       "10269849"  
       "8588400"   
       "11623841"  
       "8"         
       "9823678"   
       "7840628"   
       "11536093"  
       "9"         
.attrs "2014-12-09"

$CodElemento$.attrs
    Zona 
"Espana" 

您可以使用以下方法知道提取FechaDato数据:

MPE$CodElemento$Detalle

不幸的是,它失去了参数的名称(Prediccion,Percentil10,Percentil90)......