0

次の問題があります: 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

4

1 に答える 1