Scala XML拉解析器和位置

时间:2011-04-19 11:12:09

标签: xml scala xmlpullparser scala-xml

我被要求编写一个实用程序来搜索大量XML文件,查找缺少属性的元素。负责部门不能仅在DTD中强制使用该属性,因为它会破坏数百个文件。他们希望在几天/几周内手动编辑它们。

我正在Scala 2.8.1中编写一个小命令行工具。我将使用一个“拉”解析器,以便我可以保持我的代码功能编程纯,并运行多线程。

我需要XML事件的位置。 Java 6(javax.xml.stream. XMLStreamReader)中提供的API有一个方法(getLocation()),它返回事件的行号。我可以使用它来编写消息,通知用户在哪里查找缺少的属性。

我更喜欢在scala.xml.pull.XMLEventReader中使用pull解析器,但它似乎不提供位置信息。

我错过了什么吗?它是否在Scala API中的其他位置?

1 个答案:

答案 0 :(得分:3)

据我所见,XMLEventReader api不提供此功能。

它依赖io.Source并且可以提供对该位置的访问权限但不提供访问权限。我没有看到一种简单的方法,因为可以访问该位置的对象是私有的。

您可能想制作自己的XMLEventReader副本,该副本会生成具有该位置的自定义XMLEvent。修改的方法是  override def elemStart有权访问该职位,并且可以在每个EvPos(line:Int, column:Int)之后生成另一个EvElemStart

您可能还会考虑使用2.9.RC1,因为某些与性能相关的错误已得到修复。