近期在解析XML的时候遇到了些问题,第一个就是上一篇中说到的Unicode字符的问题,第二个就是标签内容长度太长(超过6k字符)造成解析错误。
比如,要解析的XML文件内容如下,其中desc标签的内容长度很长(超过6000个字符),
101 Java simpsons lisa ... apple lisa 23.5
在使用Scala 自带的XML 的 API
val str = """"""val p = XML.loadString(str)print(p \ "desc") 101 Java simpsons lisa this is ... apple lisa 23.5
发现结果不是正常的文本内容,而是
“... apple lisa </desc>
<price>23.5
</price>
</book> this is ...”
desc解析越界
查询了一些原因,在stackoverflow上有个回答:XML对标签内容的长度没有限制,但XML解析工具对此有限制,本人感觉有道理。对于长度超出限制(本机测试是6000+个字符的限制)的标签进行单独处理,本文用正则表达式去获取标签内容;
eg:
if((p \ "desc").text.length() > 6000) { val regex = Pattern.compile("*?((>(?s).*? ))") val matcher = regex.matcher(str) var desc if(matcher.find()) { val match = matcher.group() desc = match.substring(4, match.length()-4) }}