我有以下问题:我正在使用 [xtract][1],一个用于解析 XML 的 Scala 库。最新版本 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] 表示路径匹配多个节点,并且预期只有一个。所以我想要的是获得一个 Seq[MyClass]。我如何告诉 XMLReader 我想将所有重复的标签解析成一个序列?我认为应用 .seq[T] 会做到这一点,但事实并非如此。帮助将不胜感激!
Upd.:抱歉,我项目中的 xtract 版本确实是 2.2.1,而不是 2.2.0 我只是查看了 README 并希望在那里看到最新的版本号 [1]:https ://github.com/lucidsoftware/xtract [2]: http: //lucidsoftware.github.io/xtract/core/api/com/lucidchart/open/xtract/MultipleMatchesError.html