我被要求编写一个实用程序来搜索大量XML文件,查找缺少属性的元素。负责部门不能仅在DTD中强制使用该属性,因为它会破坏数百个文件。他们希望在几天/几周内手动编辑它们。
我正在Scala 2.8.1中编写一个小命令行工具。我将使用一个“拉”解析器,以便我可以保持我的代码功能编程纯,并运行多线程。
我需要XML事件的位置。 Java 6(javax.xml.stream. XMLStreamReader
)中提供的API有一个方法(getLocation()
),它返回事件的行号。我可以使用它来编写消息,通知用户在哪里查找缺少的属性。
我更喜欢在scala.xml.pull.XMLEventReader
中使用pull解析器,但它似乎不提供位置信息。
我错过了什么吗?它是否在Scala API中的其他位置?
答案 0 :(得分:3)
据我所见,XMLEventReader
api不提供此功能。
它依赖io.Source
并且可以提供对该位置的访问权限但不提供访问权限。我没有看到一种简单的方法,因为可以访问该位置的对象是私有的。
您可能想制作自己的XMLEventReader
副本,该副本会生成具有该位置的自定义XMLEvent
。修改的方法是
override def elemStart
有权访问该职位,并且可以在每个EvPos(line:Int, column:Int)
之后生成另一个EvElemStart
。
您可能还会考虑使用2.9.RC1,因为某些与性能相关的错误已得到修复。