次の問題があります: XML を解析するための Scala ライブラリである [xtract][1] を使用しています。最新バージョン 2.0.0 このような XML ファイルを解析しようとしています
<annotation>
<folder>home</folder>
<filename>source</filename>
<source>
<database>Unknown</database>
</source>
<object>
<name>name1</name>
<truncated>0</truncated>
<difficult>1</difficult>
</object>
<object>
<name>name2</name>
<truncated>1</truncated>
<difficult>1</difficult>
</object>
</annotation>
XMLを解析しているクラスは次のとおりです。
case class MyObject(
name: String,
truncated: Boolean
)
trait MyObjectXml{
implicit val xmlReader: XmlReader[MyObject] = (
(__ \ "object" \ "name").read[String],
(__ \ "object" \ "truncated").read[Boolean]
).mapN(MyObject.apply)
}
object MyObjectXml extends MyObjectXmlXml
ここで私は解析を行います:
//open an XML file
val xml = scala.xml.XML.loadString(
bufferedSource
.getLines()
.mkString("\n")
)
XmlReader.seq[MyObject].read(xml) match {
case ParseSuccess(seatsXml) => ...
case ParseFailure(errors) => ...
case PartialParseSuccess(geometry, errors) => ...
}
私は ParseFailure を得ました:
List(MultipleMatchesError(/object/name), MultipleMatchesError(/object/truncated))
[エラー][2] は、パスが複数のノードに一致し、1 つだけが予期されていたことを示します。だから私が欲しいのは、Seq[MyClass] を取得することです。すべての反復タグを seq に解析したいことを XMLReader に伝えるにはどうすればよいですか? .seq[T] を適用するとうまくいくと思いましたが、そうではありません。助けていただければ幸いです。
Upd .: 申し訳ありませんが、実際、私のプロジェクトの xtract バージョンは 2.2.0 ではなく 2.2.1 です。README を見て、そこに最新のバージョン番号があることを期待していました [1]: https://github.com/lucidsoftware/xtract [2]: http://lucidsoftware.github.io/xtract/core/api/com/lucidchart/open/xtract/MultipleMatchesError.html