3

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

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

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

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

我错过了什么吗?它在 Scala API 的其他地方吗?

4

1 回答 1

3

据我所知,这不是由XMLEventReaderapi 提供的。

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

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

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

于 2011-04-19T13:49:20.093 回答