1,XML CDATA部件:
< | < | 小于号 |
> | > | 大于号 |
& | & | 和 |
' | ' | 单引号 |
" | " | 双引号 |
2,Dom4j格式化转义字符问题:
service.xml
<?xml version="1.0" encoding="UTF-8"?> <result> <service> <service_name>extractService</service_name> <service_permission><![CDATA[<auths> <auth> <data>re_org</data> <oper>read</oper> </auth> </auths>]]></service_permission> </service> </result>
上面的XML在被Dom4j格式化的时候,自动会被转义,转义后的内容如下:
<?xml version="1.0" encoding="UTF-8"?> <result> <service> <service_name>extractSrevice</service_name> <service_permission><![CDATA[<auths> <auth> <data>re_org</data> <oper>read</oper> </auth> </auths>]]></service_permission> </service> </result>
这样,显然不是想要的结果,因为CDATA不需要再转义了。所以在Dom4j中,我们可以这样处理:
public String formatXML_cdata(String inputXML) throws Exception { SAXReader reader = new SAXReader(); Document document = reader.read(new StringReader(inputXML)); String requestXML = null; XMLWriter xw = null; if (document != null) { try { OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding("UTF-8"); StringWriter sw = new StringWriter(); xw = new XMLWriter(sw, format); xw.setEscapeText(false); xw.write(document); requestXML = sw.toString(); xw.flush(); } finally { if (xw != null) { try { xw.close(); } catch (IOException e) { } } } } return requestXML; }
其它同我上篇博文所写相同,在这里特别需要注意的是:
createPrettyPrint():是一个静态辅助方法,可以用来创建漂亮的默认打印格式。此格式会缩进2个空格,修剪每个元素后的空格和其它所有的空白 。
setEscapeText(false):在该功能中,这个函数是很重要的。它决定文本输出是否应该被转义。这是默认启用的,它可以禁用。如果是文本输出格式,如在XSLT中,我们可以有XML,HTML或文本输出。
以下就是我们想要的输出:
<?xml version="1.0" encoding="UTF-8"?> <result> <head> <stat>0</stat> <message>success</message> <npage>0</npage> </head> <body> <services> <service> <service_name>addPerson</service_name> <desc>人员增加</desc> <wsdl>http://192.168.3.162:8080/resource_0010/services/resource?wsdl</wsdl> <service_permissions><auths> <auth> <data>re_org</data> <oper>read</oper> </auth> <auth> <data>re_org</data> <oper>write</oper> </auth> <auth> <data>re_org</data> <oper>read/write</oper> </auth> </auths></service_permissions> </service> <service> <service_name>deletPersom</service_name> <desc>人员裁减</desc> <wsdl>http://192.168.3.162:8080/resource_0011/services/resource?wsdl</wsdl> <service_permissions><auths> <auth> <data>re_org</data> <oper>read</oper> </auth> <auth> <data>re_org</data> <oper>write</oper> </auth> <auth> <data>re_org</data> <oper>read/write</oper> </auth> </auths></service_permissions> </service> </services> </body> </result>