CDATA嵌套 的实现

转载 2011年01月18日 17:06:00

今天代码解析一段XML时报错,经过检查发现里面有嵌套CDATA标志的情况,导致XML结构发生了变化,不能转换为xml对象了,百度下,找到下面的解决方案,测试下好使,分享下!

 

http://hi.baidu.com/yin_xiaogang/blog/item/f0f4a4ce3ef0c50592457e78.html

 

在CDATA内部的所有内容都会被解析器忽略。一个 CDATA 部件以"<![CDATA[" 标记开始,以"]]>"标记结束。但是要记住,CDATA是不能够嵌套的。但是现在,就是有人要求实现CDATA的嵌套。

比如,将下面这段XML加到另外一个XML的某个元素里面:

<?xml version="1.0" encoding="UTF-8" ?>
<System><id>library</id>
<name>Library Management</name>
<description><![CDATA[This is a sample library management subsystem for Signet.]]></description>
<Categories>
<System/>

将内部的CDATA的结尾转义?那就变成了"<![CDATA[" 和"]]>amp;",这样不好吧,老师说,接收XML的那一方怎么会知道你在里面加上了转义?

那么,可以把CDATA的结尾的"]]>"破坏掉,把它分到两个CDATA中,然后调用Java的API读取该元素的数据时,实际上API同时读取两个CDATA块,然后合成一个。

那么,把上面的XML作为一个字符串来处理,将"]]>"替换为"]]]]><![CDATA[",千万要记住,不要包含空格进去。这样,结果应该是

<?xml version="1.0" encoding="UTF-8"?>
<Messages>
<Message type="data">
<code>1199242678515-176590595</code>
<date>2008/01/02</date>
<time>10:57:58</time>
<content><![CDATA[<?xml version="1.0" encoding="UTF-8" ?>
<System><id>library</id>
<name>Library Management</name>
<description><![CDATA[This is a sample library management subsystem for Signet.]]]]><![CDATA[></description>
<Categories>
<System/>]]></content>
</Message>

</Messages>

这样,利用Object org.dom4j.Element.getData()方法得到的数据才是原始的XML片段。

 

相关文章推荐

xml格式异常-CDATA嵌套

在CDATA内部的所有内容都会被解析器忽略。一个 CDATA 部件以""标记结束。但是要记住,CDATA是不能够嵌套的。但是现在,就是有人要求实现CDATA的嵌套。 比如,将下面这段XML加到另外一...

soapUi发送报文错误导致原因CDATA嵌套问题

在CDATA内部的所有内容都会被解析器忽略。一个 CDATA 部件以""标记结束。但是要记住,CDATA是不能够嵌套的。   但如果你想把一段未知的文本输出到XML中,就一定会遇到因为CDATA嵌...

CDATA嵌套

与朋友共同进步---CDATA嵌套2008年01月18日 星期五 15:05在CDATA内部的所有内容都会被解析器忽略。一个 CDATA 部件以""标记结束。但是要记住,CDATA是不能够嵌套的。但是...
  • paul_lh
  • paul_lh
  • 2011年06月25日 23:13
  • 1634

XML<![CDATA[ ]]>嵌套

最近做项目时遇到XML嵌套的问题,找了些文章,感觉说的不是特清楚,在此重新解释一下,作为备忘。 有的时候我们需将一段XML报文需要转义的字符串分段在不同的方法里分次解析,这时可能会用到XML嵌套的...

CDATA嵌套 的实现

今天代码解析一段XML时报错,经过检查发现里面有嵌套CDATA标志的情况,导致XML结构发生了变化,不能转换为xml对象了,百度下,找到下面的解决方案,测试下好使,分享下!   http:...
  • educast
  • educast
  • 2014年04月16日 16:40
  • 932

解决<![CDATA[xml]]>不能嵌套问题!

String msgXml = xml; String str = ""; 如果xml

微信---利用JAXB和EclipseLink MOXy实现 CDATA数据转换demo

概述: 最近在弄微信,大家都知道微信是CDATA数据转换,这个挺头疼的,在网上找的EclipseLink很好用。 这里采用maven工程 1、第一步引用jar包 org.ecli...

XML:标签CDATA用法

  • 2012年01月29日 16:25
  • 28KB
  • 下载

<![CDATA[]]>和转义字符的使用和联系

一、转义方法介绍 第一种方法: 用了转义字符把>和   SELECT * FROM test WHERE 1 = 1 AND start_date  < = CURRENT_DA...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CDATA嵌套 的实现
举报原因:
原因补充:

(最多只允许输入30个字)