SAX Xml->SAXParseException在文档的元素内容中找到无效的 XML 字符 (Unicode: 0x10)
来源:互联网 发布:安卓 平板 软件 编辑:程序博客网 时间:2024/05/22 21:21
在用SAX解析xml时,遇到文件中含unicode字符,则会抛出SAXParseException。
<?xml version="1.0" encoding="UTF-8"?><books> <book id="12"> <name>Spring in Action</name> <price>45.0</price> </book> <book id="15"> <name>HG6201M </name> <price>39.0</price> </book></books>其实当文件较大时,部分某一条的数据并不是很重要,我们希望能够略过这条数据或对这条数据作特殊处理,而不是当遇到解析错误时终止解析。
参考如下:
MyHander handler = new MyHander();InputStream is = Test.class.getClass().getResourceAsStream("/file/book.xml");SAXParserFactory factory = SAXParserFactory.newInstance();XMLReader reader = factory.newSAXParser().getXMLReader();
//关键设置reader.setFeature("http://apache.org/xml/features/continue-after-fatal-error",true);reader.setContentHandler(handler);reader.setErrorHandler(handler);reader.parse(new InputSource(is));
自定义Hander:
public class ParseXmlHandler extends DefaultHandler { private String tag; private StringBuffer sb = null; @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { tag = qName; sb = new StringBuffer(); } @Override public void endElement(String uri, String localName, String qName) throws SAXException { tag = null; } @Override public void characters(char[] ch, int start, int length) throws SAXException { if (tag != null) { if (sb == null) { System.out.println("error"); } else { sb.append(ch, start, length); System.out.println(sb.toString()); } } } @Override public void fatalError(SAXParseException e) throws SAXException { sb = null; }}
源码解析:
1.查找到当解析错误时抛出异常的类
可以看到在XMLErrorReporter.java中有段代码,当fContinueAfterFatalError为false时则解析抛出异常。
case SEVERITY_FATAL_ERROR: { errorHandler.fatalError(domain, key, parseException); if (!fContinueAfterFatalError) { throw parseException; } break;}则应设置fContinueAfterFatalError为true,该类的setFeature方法则可以设置fContinueAfterFatalError的属性
查看其常量值进行对应的设置
public static final String XERCES_FEATURE_PREFIX = "http://apache.org/xml/features/"; public static final String CONTINUE_AFTER_FATAL_ERROR_FEATURE = "continue-after-fatal-error";
阅读全文
0 0
- SAX Xml->SAXParseException在文档的元素内容中找到无效的 XML 字符 (Unicode: 0x10)
- org.xml.sax.SAXParseException; lineNumber: 456; columnNumber: 67; 在 CDATA 节中找到无效的 XML 字符 (Unicode: 0
- 在 CDATA 节中找到无效的 XML 字符 (Unicode: 0x1f)
- org.xml.sax.SAXParseException元素内容必须由格式正确的字符数据或标记组成。
- org.xml.sax.SAXParseException; 元素内容必须由格式正确的字符数据或标记组成
- org.xml.sax.SAXParseException; lineNumber: 71; columnNumber: 54; 元素内容必须由格式正确的字符数据或标记组成。
- Caused by: org.xml.sax.SAXParseException; 通配符的匹配很全面, 但无法找到元素 'context:property-placeholder' 的声明。
- Caused by: org.xml.sax.SAXParseException; lineNumber: 70; columnNumber: 10; 元素类型为 "mapper" 的内容必须匹配 "
- org.xml.sax.SAXParseException的错误解决
- 问题:org.xml.sax.SAXParseException: prolog 中不允许有内容
- “xml文本内容中发现无效字符”的解决方案
- org.xml.sax.SAXParseException: cvc-elt.1:找不到元素“***”的声明。解决方法之一
- WAS下org.xml.sax.SAXParseException: cvc-elt.1:找不到元素“beans”的声明
- org.xml.sax.SAXParseException; lineNumber: 9; columnNumber: 105; cvc-elt.1: 找不到元素 'beans' 的声明。
- org.xml.sax.SAXParseException: 元素类型 "meta" 必须由匹配的结束标记 "</meta>" 终止。
- org.xml.sax.SAXParseException; lineNumber: 17; columnNumber: 63; cvc-elt.1: 找不到元素 'beans' 的声明。
- org.xml.sax.SAXParseException: 元素类型 "meta" 必须由匹配的结束标记 "</meta>" 终止。
- org.xml.sax.SAXParseException: 元素类型 "meta" 必须由匹配的结束标记 "</meta>" 终止。
- 数据结构实验之栈与队列六:下一较大值(二)
- OAuth2开发者指南—客户端
- 一文总结学习 Python 的 14 张思维导图
- <Linux>df命令
- Spring 7个模块
- SAX Xml->SAXParseException在文档的元素内容中找到无效的 XML 字符 (Unicode: 0x10)
- Eclipse-java代码规范插件的安装及使用
- Python金融应用编程(数据分析、定价与量化投资)
- A
- Codeforces 876 C Classroom Watch
- 222
- <The end tag "</c:forEach" is unbalanced>
- 子龙山人:我从Cocos2d-x团队里学到的
- hdu 5965 扫雷(递推)