用Anti-XML替换XML节点

时间:2011-11-20 11:01:24

标签: xml scala anti-xml

我正在努力使用库anti-xml替换另一个XML元素。例如,我有:

<root>
  <sub>
    <keep />
    <replace />
    <keeptoo />
  </sub>
</root>

和片段:

<inserted key="value">
  <foo>foo</foo>
  <bar>bar</bar>
</inserted>

我想制作:

<root>
  <sub>
    <keep />
    <inserted key="value">
      <foo>foo</foo>
      <bar>bar</bar>
    </inserted>      
    <keeptoo />
  </sub>
</root>

注意:必须保留<sub>名儿童的顺序。

2 个答案:

答案 0 :(得分:3)

首先我们定义根文档:

val root = 
<root>
  <sub>
    <keep />
    <replace />
    <keeptoo />
  </sub>
</root>.convert

val inserted =
  <inserted key="value">
    <foo>foo</foo>
    <bar>bar</bar>
 </inserted>.convert

然后我们得到元素:

val replace = root \\ 'replace

最后我们得到了更新的<replace/>节点的xml:

replace.updated(0, inserted).unselect

如果我们获得多个<replace/>个节点,我们将能够迭代replace来更新每个节点。

答案 1 :(得分:2)

您可以使用flatMap将所选元素替换为多个节点,例如replace.flatMap(_ => someListOfNodes).unselect

(很抱歉单独给出答案,我似乎无法对现有答案发表评论。)