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

Файлы XML в R

XML означает расширяемый язык разметки (eXtensible Markup Language), который был разработан для передачи и хранения данных.

Для чтения и записи XML-файлов в R необходимо установить расширение пакета, мы можем ввести следующую команду в консоль R для установки:

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

# Проверить успешную установку:

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

Создать файл sites.xml, xml файл и тестовый скрипт находятся в одной директории, код如下:

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

Далее мы можем использовать библиотеку XML для загрузки данных xml файла:

# Загрузка пакета XML
library("XML")
# Установить имя файла
result <- xmlParse(file = "sites.xml")
# Вывести результат
print(result)

Статистика данных xml:

# Загрузка пакета XML
library("XML")
# Установить имя файла
result <- xmlParse(file = "sites.xml")
# Извлечь корневой узел
rootnode <- xmlRoot(result)
# Статистика данных
rootsize <- xmlSize(rootnode)
# Вывести результат
print(rootsize)

Результат выполнения вышеуказанного кода:

[1] 3

Просмотреть данные узла, строку указывают в квадратных скобках [], указать строку и столбец в квадратных скобках с двойными квадратными скобками [[ ]]::

# Загрузка пакета XML
library("XML")
# Установить имя файла
result <- xmlParse(file = "sites.xml")
# Извлечь корневой узел
rootnode <- xmlRoot(result)
# Просмотреть данные 2-го узла
print(rootnode[2])
# Просмотреть 2-й узел 1-й данных
print(rootnode[[2]][[1]])
# Просмотреть 2-й узел 3-й данных
print(rootnode[[2]][[3]])

Результат выполнения вышеуказанного кода:

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

Преобразование XML в список данных

Данный код производит вывод в формате xml, мы используем функцию xmlToList() для преобразования данных файла в список, что удобнее для чтения:

# Загрузка пакета XML
library("XML")
# Установить имя файла
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] "ru.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 ru.oldtoolbag.com   222
3  3 Taobao www.taobao.com   333