首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当节点等于R中的某个值时,如何从xml创建数据框

当节点等于R中的某个值时,如何从xml创建数据框
EN

Stack Overflow用户
提问于 2019-10-30 06:19:34
回答 1查看 42关注 0票数 1

我有一个与此类似的xml (请看末尾)

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<estadodecuenta FUECD="20190904G066001" clv_participante="G066" clv_subcuenta="G066001" fecha_oper="2019/08/28" fecha_emis="2019/09/04" clv_sistema="SIN">
  <liquidaciones>
    <liquidacion num_liq="0">
      <facturas>
        <factura tipo="pago" emisor="participante" rfc="ERI160205510" razon_social="ESJ RENOVABLE I, S. DE R.L. DE C.V." domicilio="CAMPOS ELISEOS 345-P 4 CÓDIGO POSTAL. 11560 MX MIGUEL HIDALGO" fuf="20190904G066001P00" fecha_pago="2019/09/18">
          <conceptos>
            <concepto ful="20190904G066001-A01010" grupo="Pagos de Energía">
              <descripcion>Venta de energía generada en el MDA</descripcion>
              <monto_total>0.00</monto_total>
              <iva>0.00</iva>
              <total_neto>0.00</total_neto>
              <anexos />
            </concepto>
            <concepto ful="20190904G066001-A01040" grupo="Pagos de Energía">
              <descripcion>Venta de energía importada en el MDA</descripcion>
              <monto_total>0.00</monto_total>
              <iva>0.00</iva>
              <total_neto>0.00</total_neto>
              <anexos />
            </concepto>
            <concepto ful="20190904G066001-A03010" grupo="Pagos de Servicios de Reserva">
              <descripcion>Reserva para regulación secundaria en el MDA</descripcion>
              <monto_total>0.00</monto_total>
              <iva>0.00</iva>
              <total_neto>0.00</total_neto>
              <anexos />
            </concepto>
            <concepto ful="20190904G066001-A04010" grupo="Pagos de Servicios de Reserva">
              <descripcion>Reserva rodante de diez minutos en el MDA</descripcion>
              <monto_total>0.00</monto_total>
              <iva>0.00</iva>
              <total_neto>0.00</total_neto>
              <anexos />
            </concepto>
            <concepto ful="20190904G066001-A05010" grupo="Pagos de Servicios de Reserva">
              <descripcion>Reserva no rodante de diez minutos en el MDA</descripcion>
              <monto_total>0.00</monto_total>
              <iva>0.00</iva>
              <total_neto>0.00</total_neto>
              <anexos />
            </concepto>
            <concepto ful="20190904G066001-A06010" grupo="Pagos de Servicios de Reserva">
              <descripcion>Reserva rodante suplementaria en el MDA</descripcion>
              <monto_total>0.00</monto_total>
              <iva>0.00</iva>
              <total_neto>0.00</total_neto>
              <anexos />
            </concepto>
            <concepto ful="20190904G066001-A07010" grupo="Pagos de Servicios de Reserva">
              <descripcion>Reserva no rodante suplementaria en el MDA</descripcion>
              <monto_total>0.00</monto_total>
              <iva>0.00</iva>
              <total_neto>0.00</total_neto>
              <anexos />
            </concepto>
            <concepto ful="20190904G066001-A10010" grupo="Pagos de Garantía de Suficiencia de Ingresos">
              <descripcion>Garantía de suficiencia de ingresos en el MDA a generadores</descripcion>
              <monto_total>0.00</monto_total>
              <iva>0.00</iva>
              <total_neto>0.00</total_neto>
              <anexos />
            </concepto>
            <concepto ful="20190904G066001-A12020" grupo="Transferencia/Devolución del Sobrecobro por el Efecto de las Pérdidas Marginales">
              <descripcion>Devolución del sobrecobro por pérdidas marginales en el MDA a cargas directamente modeladas</descripcion>
              <monto_total>0.00</monto_total>
              <iva>0.00</iva>
              <total_neto>0.00</total_neto>
              <anexos />
            </concepto>
            <concepto ful="20190904G066001-A12030" grupo="Transferencia/Devolución del Sobrecobro por el Efecto de las Pérdidas Marginales">
              <descripcion>Devolución del sobrecobro por pérdidas marginales en el MDA a cargas indirectamente modeladas</descripcion>
              <monto_total>0.00</monto_total>
              <iva>0.00</iva>
              <total_neto>0.00</total_neto>
              <anexos />
            </concepto>
            <concepto ful="20190904G066001-A12050" grupo="Transferencia/Devolución del Sobrecobro por el Efecto de las Pérdidas Marginales">
              <descripcion>Devolución del sobrecobro por pérdidas marginales en el MDA a los exportadores</descripcion>
              <monto_total>0.00</monto_total>
              <iva>0.00</iva>
              <total_neto>0.00</total_neto>
              <anexos />
            </concepto>
            <concepto ful="20190904G066001-A12180" grupo="Transferencia/Devolución del Sobrecobro por el Efecto de las Pérdidas Marginales">
              <descripcion>Devolución del sobrecobro por pérdidas marginales en el MDA</descripcion>
              <monto_total>0.00</monto_total>
              <iva>0.00</iva>
              <total_neto>0.00</total_neto>
              <anexos />
            </concepto>
            <concepto ful="20190904G066001-A13070" grupo="Derechos Financieros de Transmisión">
              <descripcion>Derechos financieros de transmisión</descripcion>
              <monto_total>0.00</monto_total>
              <iva>0.00</iva>
              <total_neto>0.00</total_neto>
              <anexos />
            </concepto>
            <concepto ful="20190904G066001-A14180" grupo="Derechos Financieros de Transmisión">
              <descripcion>Reparto de la liquidación de DFT legados cancelados o rechazados</descripcion>
              <monto_total>0.00</monto_total>
              <iva>0.00</iva>
              <total_neto>0.00</total_neto>
              <anexos />
            </concepto>
            <concepto ful="20190904G066001-A15020" grupo="Derechos Financieros de Transmisión">
              <descripcion>Excedente de la liquidación de los DFT en el MDA a cargas directamente modeladas</descripcion>
              <monto_total>100.41</monto_total>
              <iva>16.07</iva>
              <total_neto>116.48</total_neto>
              <anexos>
                <anexo elemento="AXG0663TZL79">
                  <registrosdiarios>
                    <registro POTENCIA="2.88" PRECIO="34.8628630749444026" MONTO_DIARIO="100.41" />
                  </registrosdiarios>
                </anexo>
              </anexos>
            </concepto>
            <concepto ful="20190904G066001-A15030" grupo="Derechos Financieros de Transmisión">
              <descripcion>Excedente de la liquidación de los DFT en el MDA a cargas indirectamente modeladas</descripcion>
              <monto_total>0.00</monto_total>
              <iva>0.00</iva>
              <total_neto>0.00</total_neto>
              <anexos />
            </concepto>
            <concepto ful="20190904G066001-A15050" grupo="Derechos Financieros de Transmisión">
              <descripcion>Excedente de la liquidación de los DFT en el MDA a exportadores</descripcion>
              <monto_total>0.00</monto_total>
              <iva>0.00</iva>
              <total_neto>0.00</total_neto>
              <anexos />
            </concepto>
            <concepto ful="20190904G066001-A17080" grupo="Pago en Subastas de Derechos Financieros de Transmisión">
              <descripcion>Compra (a precio negativo) en subastas de los DFT</descripcion>
              <monto_total>0.00</monto_total>
              <iva>0.00</iva>
              <total_neto>0.00</total_neto>
              <anexos />
            </concepto>
            <concepto ful="20190904G066001-A18180" grupo="Pago en Subastas de Derechos Financieros de Transmisión">
              <descripcion>Reparto de ingresos en subastas de DFT</descripcion>
              <monto_total>0.00</monto_total>
              <iva>0.00</iva>
              <total_neto>0.00</total_neto>
              <anexos />
            </concepto>
            <concepto ful="20190904G066001-A19110" grupo="Pagos de Transacciones Bilaterales Financieras">
              <descripcion>Transacciones bilaterales financieras en el MDA al receptor</descripcion>
              <monto_total>0.00</monto_total>
              <iva>0.00</iva>
              <total_neto>0.00</total_neto>
              <anexos />
            </concepto>
            <concepto ful="20190904G066001-A67290" grupo="Pago en Subastas de Derechos Financieros de Transmisión">
              <descripcion>Pago diario al Fondo de Balance de Pagos de Subasta de DFT</descripcion>
              <monto_total>0.00</monto_total>
              <iva>0.00</iva>
              <total_neto>0.00</total_neto>
              <anexos />
            </concepto>
            <concepto ful="20190904G066001-B01010" grupo="Pagos de Energía">
              <descripcion>Venta de energía generada en el MTR</descripcion>
              <monto_total>0.00</monto_total>
              <iva>0.00</iva>
              <total_neto>0.00</total_neto>
              <anexos />
            </concepto>
            <concepto ful="20190904G066001-B01040" grupo="Pagos de Energía">
              <descripcion>Venta de energía importada en el MTR</descripcion>
              <monto_total>0.00</monto_total>
              <iva>0.00</iva>
              <total_neto>0.00</total_neto>
              <anexos />
            </concepto>
            <concepto ful="20190904G066001-B02020" grupo="Cargos de Energía">
              <descripcion>Compra de energía en el MTR de cargas directamente modeladas</descripcion>
              <monto_total>3934.60</monto_total>
              <iva>629.54</iva>
              <total_neto>4564.14</total_neto>
              <anexos>
                <anexo elemento="AXG0663TZL79">
                  <nodo>03SAN-115</nodo>
                  <registroshorarios>
                    <registro HORA="1" FDP="0" POTENCIA_MTR="0" POTENCIA_MDA="0" PRECIO="1401.46" MONTO_HORARIO="0" />
                    <registro HORA="2" FDP="0" POTENCIA_MTR="0" POTENCIA_MDA="0" PRECIO="1318.33" MONTO_HORARIO="0" />
                    <registro HORA="3" FDP="0" POTENCIA_MTR="0" POTENCIA_MDA="0" PRECIO="1193.48" MONTO_HORARIO="0" />
                    <registro HORA="4" FDP="0" POTENCIA_MTR="0" POTENCIA_MDA="0" PRECIO="1106.02" MONTO_HORARIO="0" />
                    <registro HORA="5" FDP="0" POTENCIA_MTR="0" POTENCIA_MDA="0" PRECIO="960.24" MONTO_HORARIO="0" />
                    <registro HORA="6" FDP="0" POTENCIA_MTR="0" POTENCIA_MDA="0" PRECIO="1059.13" MONTO_HORARIO="0" />
                    <registro HORA="7" FDP="0" POTENCIA_MTR="0" POTENCIA_MDA="0" PRECIO="1147.91" MONTO_HORARIO="0" />
                    <registro HORA="8" FDP="0" POTENCIA_MTR="0" POTENCIA_MDA="0" PRECIO="1244.73" MONTO_HORARIO="0" />
                    <registro HORA="9" FDP="0" POTENCIA_MTR="0" POTENCIA_MDA="0.18" PRECIO="1355.08" MONTO_HORARIO="-243.91" />
                    <registro HORA="10" FDP="0" POTENCIA_MTR="0" POTENCIA_MDA="0.18" PRECIO="1444.18" MONTO_HORARIO="-259.95" />
                    <registro HORA="11" FDP="0" POTENCIA_MTR="0" POTENCIA_MDA="0.18" PRECIO="1399.78" MONTO_HORARIO="-251.96" />
                    <registro HORA="12" FDP="0" POTENCIA_MTR="0" POTENCIA_MDA="0.18" PRECIO="1330.53" MONTO_HORARIO="-239.5" />
                    <registro HORA="13" FDP="0" POTENCIA_MTR="0" POTENCIA_MDA="0.18" PRECIO="1327.75" MONTO_HORARIO="-239" />
                    <registro HORA="14" FDP="0" POTENCIA_MTR="0" POTENCIA_MDA="0.18" PRECIO="1349.27" MONTO_HORARIO="-242.87" />
                    <registro HORA="15" FDP="0" POTENCIA_MTR="0" POTENCIA_MDA="0.18" PRECIO="1380.5" MONTO_HORARIO="-248.49" />
                    <registro HORA="16" FDP="0" POTENCIA_MTR="0" POTENCIA_MDA="0.18" PRECIO="1399.71" MONTO_HORARIO="-251.95" />
                    <registro HORA="17" FDP="0" POTENCIA_MTR="0" POTENCIA_MDA="0.18" PRECIO="1396.47" MONTO_HORARIO="-251.36" />
                    <registro HORA="18" FDP="0" POTENCIA_MTR="0" POTENCIA_MDA="0.18" PRECIO="1423.06" MONTO_HORARIO="-256.15" />
                    <registro HORA="19" FDP="0" POTENCIA_MTR="0" POTENCIA_MDA="0.18" PRECIO="1445.31" MONTO_HORARIO="-260.16" />
                    <registro HORA="20" FDP="0" POTENCIA_MTR="0" POTENCIA_MDA="0.18" PRECIO="1381.8" MONTO_HORARIO="-248.72" />
                    <registro HORA="21" FDP="0" POTENCIA_MTR="0" POTENCIA_MDA="0.18" PRECIO="1451.21" MONTO_HORARIO="-261.22" />
                    <registro HORA="22" FDP="0" POTENCIA_MTR="0" POTENCIA_MDA="0.18" PRECIO="1333.26" MONTO_HORARIO="-239.99" />
                    <registro HORA="23" FDP="0" POTENCIA_MTR="0" POTENCIA_MDA="0.18" PRECIO="1286.89" MONTO_HORARIO="-231.64" />
                    <registro HORA="24" FDP="0" POTENCIA_MTR="0" POTENCIA_MDA="0.18" PRECIO="1154.04" MONTO_HORARIO="-207.73" />
                  </registroshorarios>
                </anexo>
              </anexos>
            </concepto>

我只想提取等于"Compra de energía en el MTR de cargas directamente modeladas“的”data.frame“以及它的子节点上包含的值”.//anexos/anexo/nodo/registro“。换句话说,用"registro”值创建一个注册表。

到目前为止,我已经成功地创建了一个带有“概念”值的注册表,但是我不能到达“data.frame”节点。

代码语言:javascript
复制
library(XML)
library(xml2)
library(tidyr)

xml.read <- read_xml(myxml)
xml.read <- xml_ns_strip(xml.read)

#create data frame
a <- xml.read %>% xml_find_all(".//factura") %>%
map_df(~{
  xml_find_all(.x, ".//conceptos/concepto") %>% # get all the sub-records
    map_df(~{

      ch <- xml_children(.x) # get all the kids
      as.list(set_names( # mash them together
        xml_text(ch),
        xml_name(ch)
      ))
    }) 
}) %>%

  readr::type_convert() # get better column types
data.frame(a)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-30 11:23:33

xml2包是矢量化的,因此实际上不需要使用循环或映射函数。

在本例中,我假设您只有一个grupo=="Cargos de Energía“节点,如果您确实有多个节点,则必须遍历"CargoEnergy”变量中的每个节点,并分别处理它们。

代码语言:javascript
复制
library(xml2)

#read file
xml.read <-read_xml("stack.xml")
xml.read <- xml_ns_strip(xml.read)

#find all concepto nodes
nodes<-xml_find_all(xml.read, ".//conceptos/concepto")
#filter for the nodes for grupo=="Cargos de Energía"
CargoEnergy<- nodes[ xml_attr(nodes, "grupo")=="Cargos de Energía"]

#find the registro nodes under each CargoEnergy Node
#will need a loop/apply if more than 1 node is expected
registro<-xml_find_all(CargoEnergy, ".//registro")

#extract all attributes and combine into data frame
#assumes each node has the same attributes in the same order
answer<-data.frame(do.call(rbind, xml_attrs(registro)))

这可能不是一个完整的答案,但应该会把你带到正确的方向。祝好运。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58616179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档