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

R XML 文件

XML sta per linguaggio di markup estensibile (eXtensible Markup Language), progettato per trasmettere e memorizzare dati.

In R è necessario installare il pacchetto estensione per leggere e scrivere file XML, possiamo digitare il seguente comando nel terminale di R per installarlo:

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

# Visualizzare se l'installazione è avvenuta con successo

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

Creare il file sites.xml, il file xml deve essere nello stesso percorso del script di test, il codice è il seguente:

<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>it.oldtoolbag.com</url>
        <likes>222</likes>
    </site>
 
    <site>
        <id>3</id>
        <name>Taobao</name>
        <url>www.taobao.com</url>
        <likes>333</likes>
    </site>
</sites>

Poi possiamo utilizzare il pacchetto XML per caricare i dati del file xml:

# 载入 XML 包
library("XML")
# Impostare il nome del file
result <- xmlParse(file = "sites.xml")
# Output dei risultati
print(result)

Statisticare le dimensioni xml:

# 载入 XML 包
library("XML")
# Impostare il nome del file
result <- xmlParse(file = "sites.xml")
# Estrazione del nodo radice
rootnode <- xmlRoot(result)
# Statistica delle dimensioni
rootsize <- xmlSize(rootnode)
# Output dei risultati
print(rootsize)

执行以上代码输出结果为:

[1] 3

Visualizzare i dati del nodo, utilizzare [] per indicare una riga, usare [[ ]] per indicare riga e colonna specifici:

# 载入 XML 包
library("XML")
# Impostare il nome del file
result <- xmlParse(file = "sites.xml")
# Estrazione del nodo radice
rootnode <- xmlRoot(result)
# Visualizzare i dati del secondo nodo
print(rootnode[2])
# Visualizzare il primo dato del secondo nodo
print(rootnode[[2]][[1]])
# Visualizzare il terzo dato del secondo nodo
print(rootnode[[2]][[3]])

执行以上代码输出结果为:

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

Convertire XML in elenco di dati

Il codice sopra convertito produce sempre in formato xml, possiamo utilizzare la funzione xmlToList() per convertire i dati del file in formato elenco, il che rende più facile la lettura:

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

执行以上代码输出结果为:

$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] "it.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 转为数据框

XML 文件数据可以转为数据框类型,这样我们就更方便对数据进行操作:

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

执行以上代码输出结果为:

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