org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; 语法分析器在此文档中遇到多个 "64,000" 实体扩展; 这是应用程序施加的限制
2013-06-30 22:11
531 查看
使用SAX解析XML文件。XML文件有1.5G,程序抛出了这个问题:
参考来源:http://blog.csdn.net/a_heng/article/details/4566841
查了查,原来是在单个xml文件中实体引用超过了默认值64000个。你用dom和sax解析XML都可能会遇到这个问题,这印证了我的猜测,java的dom是用sax来实现的。
解决方法很简单,运行Java的时候,加上参数-DentityExpansionLimit=xxxxx,你也可以在代码中解析XML前,用代码设置这个参数System.setProperty("entityExpansionLimit", "xxxxx");。xxxxx代表设定的单文件实体引用数最大值。
--------
那么这个xxxxx该怎么选择呢?
其实也很简单,选择你认为可能出现的最大值就好了,比你的文件里面的实体数多,自然就没问题了。
--------
那么如果你想知道某个文件里面有多少个实体引用该怎么办呢(放心我肯定不建议你去数)?
对,也很简单,首先我们知道实体引用都是“&"开头“;”结尾,所以我们可以用如下命令来计算:
grep -c "&.*;" yourfile.xml
其实,&在xml里表示为&的形式,所以,一个合法的xml内,有多少&就有多少实体引用,so,上面的命令效率更高的版本是:
grep -c "&" yourfile.xml
--------
为什么会对最大的实体引用数做出限制呢?这点我有些疑惑,难道要为解析实体引用准备缓存空间?但是做出来自动增长的缓存也不是不可能的啊。DentityExpansionLimit参数的问题是,如果要处理无法预期大小的xml文件怎么办?你设置为100万,xml文件里面有200万个实体引用,你有办法么?
org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; 语法分析器在此文档中遇到多个 "64,000" 实体扩展; 这是应用程序施加的限制。
参考来源:http://blog.csdn.net/a_heng/article/details/4566841
查了查,原来是在单个xml文件中实体引用超过了默认值64000个。你用dom和sax解析XML都可能会遇到这个问题,这印证了我的猜测,java的dom是用sax来实现的。
解决方法很简单,运行Java的时候,加上参数-DentityExpansionLimit=xxxxx,你也可以在代码中解析XML前,用代码设置这个参数System.setProperty("entityExpansionLimit", "xxxxx");。xxxxx代表设定的单文件实体引用数最大值。
--------
那么这个xxxxx该怎么选择呢?
其实也很简单,选择你认为可能出现的最大值就好了,比你的文件里面的实体数多,自然就没问题了。
--------
那么如果你想知道某个文件里面有多少个实体引用该怎么办呢(放心我肯定不建议你去数)?
对,也很简单,首先我们知道实体引用都是“&"开头“;”结尾,所以我们可以用如下命令来计算:
grep -c "&.*;" yourfile.xml
其实,&在xml里表示为&的形式,所以,一个合法的xml内,有多少&就有多少实体引用,so,上面的命令效率更高的版本是:
grep -c "&" yourfile.xml
--------
为什么会对最大的实体引用数做出限制呢?这点我有些疑惑,难道要为解析实体引用准备缓存空间?但是做出来自动增长的缓存也不是不可能的啊。DentityExpansionLimit参数的问题是,如果要处理无法预期大小的xml文件怎么办?你设置为100万,xml文件里面有200万个实体引用,你有办法么?
相关文章推荐
- digester解析xml_org.xml.sax.SAXParseException; lineNumber: 2193; columnNumber: 41; 引用了实体 "nbsp", 但未声明它
- Caused by: org.xml.sax.SAXParseException; lineNumber: 30; columnNumber: 84; 对实体 "characterEncoding"
- Bug解决方案:org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 8; 不允许有匹配 "[xX][mM][lL]" 的处理指令目标
- org.xml.sax.SAXParseException;lineNumber: 9; columnNumber: 6;不允许有匹配 "[xX][mM][lL]"的处理指令目标。
- Bug解决方案:org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 8; 不允许有匹配 "[xX][mM][lL]" 的处理指令目标
- Bug解决方案:org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 8; 不允许有匹配 "[xX][mM][lL]" 的处理指令目标
- Bug解决方案:org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 8; 不允许有匹配 "[xX][mM][lL]" 的处理指令目标
- Bug解决方案:org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 8; 不允许有匹配 "[xX][mM][lL]" 的处理指令目标
- Bug解决方案:org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 8; 不允许有匹配 "[xX][mM][lL]" 的处理指令目标
- ERROR : org.xml.sax.SAXParseException; lineNumber: 9; columnNumber: 6; 不允许有匹配 "[xX][mM][lL]" 的处理指令目标
- soapUI:org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 8; 不允许有匹配 "[xX][mM][lL]
- Cause: org.xml.sax.SAXParseException; lineNumber: 32; columnNumber: 14; 注释中不允许出现字符串 "--"
- Bug解决方案:org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 8; 不允许有匹配 "[xX][mM][lL]" 的处理指令目标
- Mybatis出现Cause: org.xml.sax.SAXParseException; lineNumber: 62; columnNumber: 18; 元素类型为 "constructor"
- Bug解决方案:org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 8; 不允许有匹配 "[xX][mM][lL]" 的处理指令目标
- org.xml.sax.SAXParseException; lineNumber: 23; columnNumber: 29; schema_reference.4: 无法读取方案文档 'http:
- Bug解决方案:org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 8; 不允许有匹配 "[xX][mM][lL]" 的处理指令目标
- spring初次搭建碰到问题 Caused by: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 7; 不允许有匹配 "[xX
- Caused by: org.xml.sax.SAXParseException; lineNumber: 70; columnNumber: 10; 元素类型为 "mapper" 的内容必须匹配 "
- Bug解决方案:org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 8; 不允许有匹配 "[xX][mM][lL]" 的处理指令目标