English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Archivos XML en R

XML se refiere al lenguaje de marcado extensible (eXtensible Markup Language), XML se diseñó para transmitir y almacenar datos.

Para leer y escribir archivos XML en R se necesita instalar el paquete de extensión, podemos ingresar el siguiente comando en el console de R para instalarlo:

install.packages("XML", repos = "https://mirrors.ustc.edu.cn/CRAN/)

Verificar si se instaló con éxito:

> any(grepl("XML", installed.packages()))
[1]] TRUE

Crear el archivo sites.xml, el archivo xml está en el mismo directorio que el script de prueba, el código es el siguiente:

sites>
    <site>
        <id>1</id>
        <name>Google</name>
        <url>www.google.com</url>
        <likes>111</likes>
    </site>
 
    <site>
        <id>2</id>
        <name>w3codebox</name>
        <url>es.oldtoolbag.com</url>
        <likes>222</likes>
    </site>
 
    <site>
        <id>3</id>
        <name>Taobao</name>
        <url>www.taobao.com</url>
        <likes>333</likes>
    </site>
</sites>

A continuación, podemos usar el paquete XML para cargar los datos del archivo xml:

# 载入 XML 包
library("XML")
# 设置文件名
result <- xmlParse(file = "sites.xml")
# Salida de resultados
print(result)

Estadísticas de datos xml:

# 载入 XML 包
library("XML")
# 设置文件名
result <- xmlParse(file = "sites.xml")
# Extraer el nodo raíz
rootnode <- xmlRoot(result)
# Estadísticas de datos
rootsize <- xmlSize(rootnode)
# Salida de resultados
print(rootsize)

El resultado de ejecutar el código anterior es:

[1]] 3

Ver los datos del nodo, en una línea específica se usa [ ], para especificar una fila y columna se usa [[ ]]::

# 载入 XML 包
library("XML")
# 设置文件名
result <- xmlParse(file = "sites.xml")
# Extraer el nodo raíz
rootnode <- xmlRoot(result)
# Ver el nodo número 2 datos del nodo
print(rootnode[2)]
# Ver el nodo número 2 del nodo número  1 un dato
print(rootnode[[2]][[1]])
# Ver el nodo número 2 del nodo número 3 un dato
print(rootnode[[2]][[3]])

El resultado de ejecutar el código anterior es:

$site
<site>
  <id>2</id>
  <name>w3codebox</name>
  <url>es.oldtoolbag.com</url>
  <likes>222</likes>
</site> 
attr(,"class")
[1]] "XMLInternalNodeList" "XMLNodeList"        
<id>2</id> 
<url>es.oldtoolbag.com</url>

XML a lista de datos

El código anterior genera salida en formato xml, podemos usar la función xmlToList() para convertir los datos del archivo en formato lista, lo que facilita la lectura:

# 载入 XML 包
library("XML")
# 设置文件名
result <- xmlParse(file = "sites.xml")
# 转为列表
xml_data <- xmlToList(result)
print(xml_data)
print("============================")
# 输出第一行第二列的数据
print(xml_data[[1]][[2]])

El resultado de ejecutar el código anterior es:

$site
$site$id
[1] "1"
$site$name
[1] "Google"
$site$url
[1] "www.google.com"
$site$likes
[1] "111"
$site
$site$id
[1] "2"
$site$name
[1] "w3codebox"
$site$url
[1] "es.oldtoolbag.com"
$site$likes
[1] "222"
$site
$site$id
[1] "3"
$site$name
[1] "Taobao"
$site$url
[1] "www.taobao.com"
$site$likes
[1] "333"
[1] "============================"
[1] "Google"

XML 转为数据框

Los datos de archivos XML se pueden convertir en tipo de data frame, de esta manera podemos operar los datos más fácilmente:

# 载入 XML 包
library("XML")
# xml 文件数据转为数据框
xmldataframe <- xmlToDataFrame("sites.xml")
print(xmldataframe)

El resultado de ejecutar el código anterior es:

  id name  url likes
1  1 Google www.google.com   111
2  2 w3codebox es.oldtoolbag.com   222
3  3 Taobao www.taobao.com   333