构建包含Anti-XML对象的XML文本

时间:2012-06-25 22:07:28

标签: xml scala xml-literals anti-xml

假设我有一个Anti-XML对象,例如:

import com.codecommit.antixml._
val child = <child attr="val">...</child>.convert

我想构建一个包含child作为子项的XML对象:

<parent foo="bar"><foo/><child attr="val">...</child><foo/></parent>

显而易见的方法是

val parent : Elem = <parent foo="bar"><foo/>{ child }<foo/></parent>.convert

问题是Scala的XML文字无法识别Anti-XML的对象,因此child会转换为字符串,并作为文本节点嵌入parent中:

<parent foo="bar"><foo/>&lt;child attr="val"&gt;...&lt;/child&gt;<foo/></parent>

如何解决此问题?

1 个答案:

答案 0 :(得分:3)

XML.loadString应该这样做:

val child: com.codecommit.antixml.Elem = <child />.convert
val parent: scala.xml.Elem = <parent>{scala.xml.XML.loadString(child.toString)}</parent>

对于更复杂的深度操作场景,我认为通过避免使用文字和使用内置的Zipper支持,你会做得更好。