0

我想在 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>
4

1 回答 1

0

我采用了示例数据,其中包括三个名为 position1、position2 和 position3 的 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>
于 2019-07-25T11:05:04.653 回答