问题描述
我通过dom4j生产xml文档时,如果我的文档里面有&、<等特殊字符的话,则会对其进行转义,有什么方法可以避免吗?原来的:<?xml version="1.0" encoding="ISO8859_1"?><QUERY name="query" bo="project_versions"> <ITEMS name="columns"> <COLUMN bo="project_versions" name="name" width="0"/> <COLUMN bo="project_versions" name="description" width="0"/> <COLUMN bo="project_versions" name="project_id" width="0"/> <COLUMN bo="project_versions" name="hs_creator" width="0"/> <COLUMN bo="project_versions" name="hs_created_time" width="0"/> </ITEMS> <ITEMS name="filters"> <FILTER type="cf" op="1" not="false"> <FILTER type="f" bo="project_versions" field="hs_created_time" func="4" argument="false" not="false" op="8" value="=T_LAST_W(1)"/> <FILTER type="f" bo="project_versions" field="hs_creator" func="0" argument="false" not="false" op="0" value="tom,neil,jerry"/> <FILTER type="f" bo="project_versions" field="hs_modifier" func="0" argument="false" not="false" op="0" value="ted,jerry"/> <FILTER type="f" bo="project_versions" field="description" func="0" argument="false" not="false" op="6" value="china 中国"/> </FILTER> </ITEMS> <ITEMS name="orderby"> <COLUMN bo="project_versions" name="description" asc="true"/> <COLUMN bo="project_versions" name="name" asc="false"/> </ITEMS> <ITEMS name="groupby"/></QUERY>新生成的,需要通过dom4j写入到数据库的:<?xml version="1.0" encoding="ISO8859_1"?><QUERY name="query" bo="project_versions"> <ITEMS name="columns"> <COLUMN bo="project_versions" name="name" width="0"/> <COLUMN bo="project_versions" name="description" width="0"/> <COLUMN bo="project_versions" name="project_id" width="0"/> <COLUMN bo="project_versions" name="hs_creator" width="0"/> <COLUMN bo="project_versions" name="hs_created_time" width="0"/> </ITEMS> <ITEMS name="filters"> <FILTER type="cf" op="1" not="false"> <FILTER type="f" bo="project_versions" field="hs_created_time" func="4" argument="false" not="false" op="8" value="=T_LAST_W(1)"/> <FILTER type="f" bo="project_versions" field="hs_creator" func="0" argument="false" not="false" op="0" value="tom00,neil00,jerry00"/> <FILTER type="f" bo="project_versions" field="hs_modifier" func="0" argument="false" not="false" op="0" value="ted00,jerry00"/> <FILTER type="f" bo="project_versions" field="description" func="0" argument="false" not="false" op="6" value="china &#20013;&#22269;"/> </FILTER> </ITEMS> <ITEMS name="orderby"> <COLUMN bo="project_versions" name="description" asc="true"/> <COLUMN bo="project_versions" name="name" asc="false"/> </ITEMS> <ITEMS name="groupby"/> </QUERY> 问题补充:飞雪无情 写道
解决方案
这是个问题,还在Attribute里的。你还之用setValue()。那这样可不可以,把你修改好的,新生成的xml转化成xml文本,然后替换里面的&为&就好了!
解决方案二:
那你可以我说的第一种方式,替换法。把你的值china 中国替换成china &#20013;&#22269;这个值set进去就没有问题了吧
解决方案三:
需要设置: xw.setEscapeText(false); // 是否转义更详细的信息 http://lavasoft.blog.51cto.com/62575/347348参考下! 人家写的很不错的!
解决方案四:
dom4j在输出或保存xml时的XMLWriter类,可以通过setEscapeText方法设置是否转义
解决方案五:
把你的特殊字符替换了。下面是常用的五种下面是五个在XML文档中预定义好的实体:<< 小于号>> 大于号&& 和'' 单引号"" 双引号比如你想输出&,那你的xml中要写成“&”当然你这个值是写在属性里的,是value=""这样的形式,如果是一个区域断的话可以用XML CDATA,如<FILTER><value><![CDATA[china 中国]]></value></FILTER>就ok了