你可以使用antixml创建XML文件?(Can you use antixml to create

2019-07-29 05:45发布

有使用反XML来从XML文档提取信息的几个例子,但是没有,我能找到使用抗XML创建XML文档。 请问反XML支持创建文档,或者我应该使用此另一个库(哪一个?)。 有没有人有创造与反XML的XML文档的例子吗?

Answer 1:

是的,你可以建立(和序列化)的XML文档:

import com.codecommit.antixml._

val doc = Elem(None, "doc", Attributes(), Map(), Group(
  Elem(None, "foo", Attributes("id" -> "bar"), Map(), Group(Text("baz")))
))

val writer = new java.io.StringWriter
val serializer = new XMLSerializer("UTF-8", true)

serializer.serializeDocument(doc, writer)

您还可以使用反XML的拉链做一些有趣的编辑技巧:

val foos = doc \ "foo"
val newFoo = foo.head.copy(children = Group(Text("new text!")))
val newDoc = foos.updated(0, newFoo).unselect

现在newDoc包含了编辑的文档:

scala> newDoc.toString
res1: String = <doc><foo id="bar">new text!</foo></doc>

Zipperdoc \ "foo"回报是从不同的NodeSeq ,它携带了它的上下文,它允许您“撤消”所做的选择操作信息\


更新响应ziggystar的评论如下:如果你想要像Scala的XML文本,你可以使用convert任何scala.xml.Elem

val test: com.codecommit.antixml.Elem = <test></test>.convert

我会认为这个问题是关于程序的创建。



Answer 2:

除非你正在使用抗XML的其他部分我会用Scala的文字贴。 但是,如果你正在寻找一个不错的建设者DSL一个更好的选择,在就地更新,XPath的使用(DSL和基于字符串)等等,那么我建议你看一下秤。 从0.3-RC5发布网站(http://scala-scales.googlecode.com/svn/sites/scales/scales-xml_2.9.1/0.3-RC5/index.html):

val ns = Namespace("test:uri")
val nsa = Namespace("test:uri:attribs")
val nsp = nsa.prefixed("pre")

val builder = 
  ns("Elem") /@ (nsa("pre", "attr1") -> "val1",
               "attr2" -> "val2",
       nsp("attr3") -> "val3") /(
    ns("Child"),
    "Mixed Content",
    ns("Child2") /( ns("Subchild") ~> "text" )
  )

也直接序列化,你可以利用流,如秤XML模式统一了模型流和基于树的处理。

我是一个0.3 RC6有更多的文档(和非常酷的XML比较框架),但我在等待迁移率先Sonatype的前短。 (ETA下周)



文章来源: Can you use antixml to create xml documents?