【发布时间】:2017-08-15 09:16:46
【问题描述】:
我想解析从我无法控制的来源(特别是 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 来自我无法控制的外部来源。
【问题讨论】: