专栏首页网络小说作家的编程技术沉思录Java解析xml文件遇到特殊符号&会出现异常的解决方案

Java解析xml文件遇到特殊符号&会出现异常的解决方案

文/朱季谦

在一次Java解析xml文件的开发过程中,使用SAX解析时,出现了这样一个异常信息:

Error on line 60 of document : 对实体 "xxx" 的引用必须以 ';' 分隔符结尾;

我打开xml文件后,发现该“xxx"符号之前跟着一个”&“符号,后来了解到,这类符号在xml里属于一种特殊符号,而特殊符号若没用转义符表示,直接用到xml文件里,就会在使用SAX等方式做解析时出现奇怪的异常。

其实,这都是因为这些特殊字符造成的。

XML当中特殊符号包括< > & ' "等,它们是不允许作为xml文件的PCDATA,若想使用话,需用转义符代替:

&lt;    <
&gt;    >
&amp;   &
&quot;  "
&apos;  '

那么,若要正常读取xml文件数据,应该如何使用转义符替换呢?

刚开始是想百度一番如何解决,却发现好多帖子都是好几年前的,且都没有写清楚怎么个解决方法,大多都是提到是特殊符号引起的解析异常,但怎么过滤掉,显得含糊其辞,因此,只能自己胡乱捣鼓一番,捣鼓出一个比较合适的将特殊字符过滤的方案。

实现思路其实很简单,我们可以在读取xml文件使用SAX解析前,先把xml文件通过Reader读取,然后按行读取出来拼接成一个String字符串,再使用字符串的替换方法replaceAll()将特殊符号进行替换,替换后,就可以将字符串形式的xml直接转成Document对象做xml解析了:

  String xmlStr=s.replaceAll("&","&amp;");

转换方法代码如下:

  StringBuffer buffer = new StringBuffer();
  BufferedReader bf= new BufferedReader(new FileReader("D:\\测试.xml"));
  String s = null;
     while((s = bf.readLine())!=null){
     buffer.append(s.trim());
  }

  String str = buffer.toString();
  //在这一步进行字符替换,替换成合法转义字符
  String xml=str.replaceAll("&","&amp;");

  //这里就可以将处理过的xml文件进行读取解析了
  Document document =  DocumentHelper.parseText(xml);

至此,就可以解决Java解析xml文件遇到特殊符号&出现异常的问题了。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【技术创作101训练营】我是如何使用freemarker生成Word文件的?

    这个文档有大大小小的标题层级,还有排版好的段落、各种一目了然的饼图、走势图,当然还少不了颜色循环交替的报表。精致程度不亚于小明同学的学习报告。

    程序员小明
  • 4 万字超强总结!Java 这些必备基础知识不可少

    Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。J...

    民工哥
  • Android App 国际化

    internationalization ( 国际化 )简称 i18n,因为在 i 和 n 之间还有 18 个字符,localization (本地化),简称L...

    QQ音乐技术团队
  • JavaWeb08-XML,tomcat,HTTP轻松入门

    XML&tomcat&HTTP 一.XML基础知识 1. xml介绍 XML 指可扩展标记语言(EXtensible Markup Language),也是一种...

    Java帮帮
  • 光剑评注:其实,说了这么多废话,无非就是: 一切皆是映射。不管是嵌套 XML,还是 Lisp 嵌套括号,还是 XXX 的 Map 数据结构,一切都是树形结构——映射。Lisp的本质(The Natur

    http://www.defmacro.org/ramblings/lisp.html

    一个会写诗的程序员
  • Lisp的本质(The Nature of Lisp)学习思考

    Lisp的本质(The Nature of Lisp)学习思考 作者 Slava Akhmechet 译者 Alec Jang 出处: http://www....

    Florian
  • 手 Q 红包工程师过去一年踩过的坑

    工作中遇到的一切,几乎都是从0开始,故难免会走很多弯路,也曾踩过无数的坑,欢迎各位解答。若有异议,欢迎拍砖。

    张学林
  • 基于XML描述的可编程函数式ETL实现

    传统 ETL 主要以 SQL 为主要技术手段,把数据经抽取、清洗转换之后加载到数据仓库。但是在如今移动互联网大力发展的场景下,产生大量碎片化和不规则的数据。政府...

    yuanyi928
  • Java 面试知识点解析(四)——版本特性篇(1)

    在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Jav...

    我没有三颗心脏
  • 最详细的XML操作学习笔记

    以上这种数据, 如果通过我们学习的集合来存储的话, 需要通过多个集合的嵌套使用.

    Java学习
  • 第二十九天-加强1-Junit&类加载&反射&Properties&BeanUtils&xml&动态代理&数据库【悟空教程】

    第二十九天-加强1-Junit&类加载&反射&Properties&BeanUtils&xml&动态代理&数据库【悟空教程】

    Java帮帮
  • 当Java遇到XML 的邂逅+dom4j

    房上的猫
  • classpath* 和 classpath使用遇到的问题

    在spring配置mybatis的时候需要加载mybatis的多个相关配置文件,其中mybatis的mapper对应的xml通常放在其他的jar包中,mybat...

    haifeiWu
  • Android基础总结(12)——XML和JSON解析

    XML和JSON解析    在网络上传输数据时最常用的格式有两种:XML和JSON。本文主要就是学习如何对这两种常用的数据格式进行解析。 1、XML和JSON的...

    mukekeheart
  • 关于编码的那些事

    之前做一个POC的时候,Vicky同学遇到一个关于编码的问题,问到我,我觉得当时没有解释得很清楚,于是决定查阅相关的资料文档,写一篇文章,记录这个问题及对背后的...

    Bruce Li
  • 美女面试官问你JavaWeb学的怎么样?JavaWEB面试复习看这一篇就够了!!

    近期在复习学过的Java知识,发现都还给老师了,连Request和Response有什么不同都不懂。。。 直到无意中看到这个之前在回车课堂微信群,拿到的第一手...

    ChinaManor
  • 你必须掌握的 21 个 Java 核心技术!

    写这篇文章的目的是想总结一下自己这么多年来使用java的一些心得体会,希望可以给大家一些经验,能让大家更好学习和使用Java。

    Java技术栈
  • Java开发必须掌握的 21 个 Java 核心技术!

    写这篇文章的目的是想总结一下自己这么多年来使用java的一些心得体会,希望可以给大家一些经验,能让大家更好学习和使用Java。

    三哥
  • 你必须掌握的 21 个 Java 核心技术!(干货)

    经过这么多年的Java开发,以及结合平时面试Java开发者的一些经验,我觉得对于J2SE方面主要就是要掌握以下的一些内容。

    用户5224393

扫码关注云+社区

领取腾讯云代金券