8

Anti-Xmlを使用してXMLドキュメントから情報を抽出する例はいくつかありますが、Anti-Xmlを使用してXMLドキュメントを作成する例はありません。Anti-Xmlはドキュメントの作成をサポートしていますか、それともこれに別のライブラリを使用する必要がありますか(どれですか?)。Anti-Xmlを使用してXMLドキュメントを作成する例はありますか?

4

2 に答える 2

5

はい、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)

Anti-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>

Zipper返されるは、コンテキストに関する情報を保持するというdoc \ "foo"点でaとは異なります。NodeSeqこれにより、によって実行された選択操作を「元に戻す」ことができます\


以下のziggystarのコメントに応じて更新してください:ScalaのXMLリテラルのようなものが必要な場合は、次のいずれかで使用できconvertますscala.xml.Elem

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

質問はプログラムによる作成に関するものだと思いました。

于 2012-05-02T21:01:03.930 に答える
1

あなたがanti-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" )
  )

また、直接シリアル化の場合、Scales Xmlモデルがストリーミングとツリーベースの処理のためにモデルを統合するため、ストリーミングを活用できます。

私は0.3-RC6の前にもっと多くのドキュメント(そして非常にクールなxml比較フレームワーク)がありますが、最初にsonatypeに移行するのを待っています。(来週のイータ)

于 2012-05-03T18:37:43.830 に答える