如何在R中添加和重新排列XML文件的节点



下面是我拥有的一个XML文件的子集。我想在下添加一个新元素,但无法将其用于addNode()。如何在<language>下添加新节点?

此外,如何重新排序文件,使<n_cases>紧跟在<definite_source>之前?

<?xml version="1.0" encoding="UTF-8"?>
<dataset>
<language>
<name>Old_Irish</name>
<definite_source>Demonstrative</definite_source>
<n_cases>5</n_cases>
</language>
<language>
<name>Irish</name>
<definite_source>Demonstrative</definite_source>
<n_cases>4</n_cases>
</language>
</dataset>

;xml2";包具有用于在XML文档中添加和删除节点的简单语法。

要重新排列结构,首先需要定位并复制要移动的节点,然后从文档中删除它们,然后将原始列表添加回文档中。我不建议这样做,除非你有一个非常具体的理由这样做。

library(xml2)
library(magrittr)
page <- read_xml("<dataset>
<language>
<name>Old_Irish</name>
<definite_source>Demonstrative1</definite_source>
<n_cases>5</n_cases>
</language>
<language>
<name>Irish</name>
<definite_source>Demonstrative2</definite_source>
<n_cases>4</n_cases>
</language>
</dataset>")
#Find the nodes you want to relocate
nodesdefinite <- page %>% xml_find_all(".//definite_source")
html_structure(page)
#Remove the Nodes
page %>% xml_find_all(".//definite_source") %>% xml_remove()
#Add them where desired
page %>% xml_find_all(".//n_cases") %>% xml_add_sibling(nodesdefinite, .where="after")
#Verify the structure
html_structure(page)
page %>% xml_find_all(".//definite_source")
#To add a node
#Using the add_child, add the new node at the end of the list
page %>% xml_find_all(".//language") %>% xml_add_child("newNode", "new value")
html_structure(page)   #Verify the structure
#Using the add_sibling, better control for placement
page %>% xml_find_all(".//n_cases") %>% xml_add_sibling("newSibling", pi, .where="before")

最新更新