2011-11-20 89 views
4

我很努力地用另一个使用库反xml替换XML元素。举例来说,我有:使用反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>孩子的顺序必须是保守的。

回答

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更新每个节点。

+0

谢谢您的回答。任何想法如何我可以用几个节点的列表来替换''元素? – paradigmatic

+0

我不确定这是可能的,但我不是antixml专家。你能否考虑'',''......并单独替换它们? – David

+0

不,因为我不知道应该添加多少个节点。我现在使用另一种方法,但如果我再次遇到问题,我会补充另一个问题。 – paradigmatic

2

您可以使用flatMap(例如, replace.flatMap(_ => someListOfNodes).unselect

(对不起,使其成为一个独立的答案,看来我不能在现有的评论。)