xml2包允许用户创建 XML 文档。我正在尝试使用管道运算符创建一个文档,%>%
以添加子节点和兄弟节点的各种组合。我无法弄清楚如何在原始孩子的兄弟姐妹之后的子节点中创建子节点(参见下面的示例)。
是否可以“提升”一个级别以创建更多节点,或者必须在链接命令之外创建它们?
我想要的是
library(xml2)
x1 <- read_xml("<parent><child>1</child><child><grandchild>2</grandchild></child><child>3</child><child>4</child></parent>")
message(x1)
#> <?xml version="1.0" encoding="UTF-8"?>
#> <parent>
#> <child>1</child>
#> <child>
#> <grandchild>2</grandchild>
#> </child>
#> <child>3</child>
#> <child>4</child>
#> </parent>
我正在创造的东西是错误的
library(magrittr)
library(xml2)
x2 <- xml_new_document()
x2 %>%
xml_add_child("parent") %>%
xml_add_child("child", 1) %>%
xml_add_sibling("child", 4, .where="after") %>%
xml_add_sibling("child", 3) %>%
xml_add_sibling("child", .where="before") %>%
xml_add_child("grandchild", 2)
message(x2)
#> <?xml version="1.0" encoding="UTF-8"?>
#> <parent>
#> <child>1</child>
#> <child>4</child>
#> <child>
#> <grandchild>2</grandchild>
#> </child>
#> <child>3</child>
#> </parent>
使用 XML 包的解决方案
如果使用XML包,这实际上是相当简单的。
library(XML)
x2 <- newXMLNode("parent")
invisible(newXMLNode("child", 1, parent=x2))
invisible(newXMLNode("child", newXMLNode("grandchild", 2), parent=x2))
invisible(newXMLNode("child", 3, parent=x2))
invisible(newXMLNode("child", 4, parent=x2))
x2
#> <?xml version="1.0" encoding="UTF-8"?>
#> <parent>
#> <child>1</child>
#> <child>
#> <grandchild>2</grandchild>
#> </child>
#> <child>3</child>
#> <child>4</child>
#> </parent>