r - 如何在 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")
推荐阅读
- arrays - Searchbar 一系列字典 Swift
- java - 有人可以为我解释这个错误“HTTP Status 404 – Not Found Spring MVC”吗?
- javascript - 如何在Vue中清除画布?
- php - 如何在 php 中获取非对象的属性?
- java - 缓冲图像上的可拖动形状
- javascript - Javascript 比较 window.pageYOffset 奇怪的逻辑
- r - RStudio - 相关矩阵
- android - 可以使用新的应用内评论吗?
- python - 如何获取二维 numpy 数组中每一行的前 2 个值的索引,但不包括特定区域?
- reactjs - 如何将组件及其值作为道具传递