我想在R中将多个XML字符串(>1000(合并为一个字符串。例如,这可以通过XML包(xml_add_sibling(来完成。但是,我想摆脱中间根节点(在我的示例中为"位置"(。
输入:
library(XML)
position1 <- <positions>
<moneyMarket>
<positionName>1</positionName>
<notional>10000</notional>
<currency>EUR</currency>
</moneyMarket>
</positions>
position2 <- <positions>
<moneyMarket>
<positionName>2</positionName>
<notional>40000</notional>
<currency>EUR</currency>
</moneyMarket>
</positions>
position3 <- <positions>
<moneyMarket>
<positionName>3</positionName>
<notional>50000</notional>
<currency>EUR</currency>
</moneyMarket>
</positions>
法典:
combined_XML <- xml_add_sibling(position1,position2)
combined_XML <- xml_add_sibling(combined_XML,position3)
实际结果:
<positions>
<moneyMarket>
<positionName>1</positionName>
<notional>10000</notional>
<currency>EUR</currency>
</moneyMarket>
</positions>
<positions>
<moneyMarket>
<positionName>2</positionName>
<notional>40000</notional>
<currency>EUR</currency>
</moneyMarket>
</positions>
<positions>
<moneyMarket>
<positionName>3</positionName>
<notional>50000</notional>
<currency>EUR</currency>
</moneyMarket>
</positions>
预期成果:
<positions>
<moneyMarket>
<positionName>1</positionName>
<notional>10000</notional>
<currency>EUR</currency>
</moneyMarket>
<moneyMarket>
<positionName>2</positionName>
<notional>40000</notional>
<currency>EUR</currency>
</moneyMarket>
<moneyMarket>
<positionName>3</positionName>
<notional>50000</notional>
<currency>EUR</currency>
</moneyMarket>
</positions>
我取了示例数据,其中包括三个名称为位置1,位置2和位置3的xml文档。由于每个都有一个名为 position 的名称,因此我使用get
函数来访问它们。我分配了i<-3
,因为存在三个xml文档。
如果您有 1000 个 xml 文件,则需要分配i<-1000
.所以这意味着你有 1000 个 xml 文件,文件名和数字都像 ;位置 1, 位置 2, 位置 3, 位置 4, ..., 位置 1000。
下面的代码将其他 xml 文档的子文档添加到第一个position1
的子文档。因此,最后,通过运行xmlParse(position1)
您可以获得结果。
library(xml2)
library(XML)
position1 <- "<positions>
<moneyMarket>
<positionName>1</positionName>
<notional>10000</notional>
<currency>EUR</currency>
</moneyMarket>
</positions>"
position2 <- "<positions>
<moneyMarket>
<positionName>2</positionName>
<notional>40000</notional>
<currency>EUR</currency>
</moneyMarket>
</positions>"
position3 <- "<positions>
<moneyMarket>
<positionName>3</positionName>
<notional>50000</notional>
<currency>EUR</currency>
</moneyMarket>
</positions>"
position1 <- read_xml(position1)
position2 <- read_xml(position2)
position3 <- read_xml(position3)
i <- 3
while(i>1) {
mychildren <- xml_children(get(paste0("position",i)))
for (child in mychildren) {
xml_add_child(get(paste0("position",i-1)), child)
}
i <- i-1
}
xmlParse(position1)
输出:
<?xml version="1.0" encoding="UTF-8"?>
<positions>
<moneyMarket>
<positionName>1</positionName>
<notional>10000</notional>
<currency>EUR</currency>
</moneyMarket>
<moneyMarket>
<positionName>2</positionName>
<notional>40000</notional>
<currency>EUR</currency>
</moneyMarket>
<moneyMarket>
<positionName>3</positionName>
<notional>50000</notional>
<currency>EUR</currency>
</moneyMarket>
</positions>