scala.xml.pull
XMLを試したり、スケーリングしたりできます。
ファイルを解析するための実際のコードは、ここにあります。
Scales XML は、ストリーミング API である STAX API を使用できます。そのため、完全な DOM は存在せず、通常、あまり前処理を行わずに XML の一部に到達します。
特別な形式の XML ファイルでテストし、うまくいくかどうかを確認してください。
単純なテキスト検索を使用して XML に置き換えることはお勧めしません。ミスマッチの可能性は十分にあります。次に、予測できない方法でドキュメントを変更します。結果として生じるバグは、通常、見つけるのが困難です。
Scales XML で短い実験を行ったところ、非常に有望に見えます。
scala> import scales.utils._
import scales.utils._
scala> import ScalesUtils._
import ScalesUtils._
scala> import scales.xml._
import scales.xml._
scala> import ScalesXml._
import ScalesXml._
scala> import scales.xml.serializers.StreamSerializer
import scales.xml.serializers.StreamSerializer
scala> import java.io.StringReader
import java.io.StringReader
scala> import java.io.PrintWriter
import java.io.PrintWriter
scala> def xmlsrc=new StringReader("""
| <a attr1="value1"> <b/>This
| is some tex<xt/>
| <!-- A comment -->
| <c><d>
| </d>
| <removeme/>
| <changeme/>
| </c>
| </a>
| """)
xmlsrc: java.io.StringReader
scala> def pull=pullXml(xmlsrc)
pull: scales.xml.XmlPull with java.io.Closeable with scales.utils.IsClosed
scala> writeTo(pull, new PrintWriter(System.out))
<?xml version="1.0" encoding="UTF-8"?><a attr1="value1"> <b/>This
is some tex<xt/>
<!-- A comment -->
<c><d>
</d>
<removeme/>
<changeme/>
</c>
res0: Option[Throwable] = None
scala> def filtered=pull flatMap {
| case Left(e : Elem) if e.name.local == "removeme" => Nil
| case Right(e : EndElem) if e.name.local == "removeme" => Nil
| case Left(e : Elem) if e.name.local == "changeme" => List(Left(Elem("x")), Left(Elem("y"
Right(EndElem("x")))
| case Right(e : EndElem) if e.name.local == "changeme" => List(Right(EndElem("x")))
| case otherwise => List(otherwise)
| }
filtered: Iterator[scales.xml.PullType]
scala> writeTo(filtered, new PrintWriter(System.out))
<?xml version="1.0" encoding="UTF-8"?><a attr1="value1"> <b/>This
is some tex<xt/>
<!-- A comment -->
<c><d>
</d>
<x><y/></x>
</c>
res1: Option[Throwable] = None
この例では、最初に XML トークン ストリームを初期化します。次に、トークン ストリームを変更せずに出力します。コメントとフォーマットが保持されていることがわかります。次に、トークン ストリームをモナド Scala API で変更し、結果を出力します。ほとんどの書式設定が保持され、変更された部分の書式設定のみが異なることがわかります。
したがって、Scales XML は問題を簡単に解決するように見えます。