Scala Sax解析器无法处理

时间:2017-08-15 09:16:46

标签: xml scala parsing

我想解析我从我的控制源(特别是Suunto体育测试者)获得的XML文件。使用scala XML.load()加载它们时,它们加载正常,但我更喜欢SAX(pull)解析以获得更好的性能。然而拉解析器似乎对文件头不满意。请参阅以下示例:

import scala.io.Source
import scala.xml.pull.XMLEventReader
val text = """<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE xml>
<MovesCount MoveslinkVersion="1.2.41.0" TimeZone="60" >
 <Device sn="Quest_2596420792" >
  <Model info="DEVICE;INT;R" >120</Model>
  <Name info="DEVICE;TEXT;R" >Quest</Name>
  <FullName info="DEVICE;TEXT;R" >Suunto Quest</FullName>
  <SerialNumber info="DEVICE;INT;R" >2596420792</SerialNumber>
  </Device>
</MovesCount>"""

val src = Source.fromString(text)

for (ev <- new XMLEventReader(src)) {
  println(ev)
}

解析时会输出错误:

  

:2:14:预期的空白

当我删除包含DOCTYPE的行或将其更改为<!DOCTYPE xml >时,错误消失,文件解析正常。

这是xml pull解析器中的错误吗?如果是,是否有可能的解决方法? XML来自我无法控制的外部资源。

1 个答案:

答案 0 :(得分:0)

在尝试了另一个解析器(Aalto XML)之后,我认为该文档确实存在超出希望的格式错误,需要在将其提供给解析器之前对其进行修复。我的解决方法是使用PushbackInputStream转换输入流时跳过DOC类型标题。