除经特别注明外,本站文章版权归JScud Develop团队或其原作者所有.

转载请注明作者和来源.  scud(飞云小侠)    欢迎访问 JScud Develop

根据XML中CDATA类型的规范可以知道:"&"和"" 如果出现在"]]>" 的内容而不是表示结束时,必须被转义为>

但是这样就存在一个问题,如果我需要输入"]]>",正确的处理是保存为"]]>",但是如果我想输入"]]>",那么应该如何保存哪? 我想了很久,除非加空格或者采用特殊的办法,否则是没有办法解决的.

1.如果我们不考虑输入"]]>"的问题,来考虑一下"]]>"的处理,看看各种XML解析器是如何处理的?

xml解析器的测试包含2个部分:设置cdata类型的数据和读出cdata类型的数据.

首先我们写一个测试的例子,计划使用JDom 1.0和Dom4j来测试一下:

package com.jscud.test;

public class XmlTestBase

{

public static String xmlpart =

"<?xml version=\"1.0\" encoding=\"UTF-8\"?>"+

"" +

""+

"" +

"" +

"";

public static void print(String str)

{

System.out.println(str);

}

}

JDom测试的例子如下:

package com.jscud.test;

import java.io.*;

import org.jdom.*;

import org.jdom.input.SAXBuilder;

import org.jdom.output.*;

//@author scud http://www.jscud.com

public class JDomXmlFileTest extends XmlTestBase

{

public static void main(String[] args) throws Exception

{

readDocument();

print("===========================");

createDocument();

}

public static void readDocument() throws Exception

{

Reader reader = new StringReader(xmlpart);

SAXBuilder builder = new SAXBuilder();

Document doc = builder.build(reader);

Element aRoot = doc.getRootElement();

Element anode = aRoot.getChild("test").getChild("hello");

print(anode.getText());

}

public static void createDocument() throws Exception

{

Document doc = new Document();

doc.setRootElement(new Element("root"));

CDATA node = new CDATA("hello alt=]]>");

//throw Exception

//node.setText("hello]]>");

Element ele = new Element("hello");

ele.setContent(node);

Element root = doc.getRootElement();

root.getChildren().add(ele);

XMLOutputter outputter = new XMLOutputter();

Format aFormat = Format.getCompactFormat();

aFormat.setEncoding("GB2312");

String sResult = outputter.outputString(doc.getRootElement().getChildren());

print(sResult);

}

}

编译并运行上面的代码结果,我们可以看到JDom无法设置Cdata的值为"]]>",会报异常.从xml字符串读出cdata的结果也没有把字串"]]>"翻译为"]]>".

接着再来测试Dom4J:

package com.xml.test;

import java.io.StringReader;

import org.dom4j.*;

import org.dom4j.io.SAXReader;

import org.dom4j.tree.DefaultCDATA;

/**

* 测试XML的CData数据类型.

*

* @author scud http://www.jscud.com

*

*/

public class Dom4jXmlTest extends XmlTestBase

{

public static void main(String[] args) throws Exception

{

readDocument();

print("===========================");

createDocument();

}

public static void createDocument()

{

Document document = DocumentHelper.createDocument();

Element root = document.addElement( "root" );

DefaultCDATA cdata = new DefaultCDATA("sample]]>");

DefaultCDATA cdata2 = new DefaultCDATA("sample]]>");

Element anode = root.addElement("cdata");

anode.add(cdata);

print(anode.getText());

print(anode.asXML());

Element anode2 = root.addElement("cdata2");

anode2.add(cdata2);

print(anode2.getText());

print(anode2.asXML());

}

public static void readDocument() throws Exception

{

StringReader strreader = new StringReader(xmlpart);

SAXReader reader = new SAXReader();

Document document = reader.read(strreader);

Node node = document.selectSingleNode( "//test/hello" );

print(node.getText());

print(node.getStringValue());

}

}

我们可以看到Dom4j也是没有做任何处理,输入的时候不作任何转换,原样输出,这样必然导致xml错误.读出的时候也没有做转换.

根据上面的测试我们可以得出结论:很多xml解析器没有正确解析cdata的数据,(jdom和dom4j用的人比较多),不要太相信这些解析器.

2.我们再来看看阅读RSS的RSS阅读器吧,例如FeedDemon和POTU,我们准备了一个CData类型的description字段,来进行测试.

内容:

Some Where

http://www.jscud.com/

Test

http://www.jscud.com

scud

Mon, 22 Aug 2005 10:22:22 GMT

<hr>

]]>

]]>

结果:

1.POTU没有做任何处理

2.FeedDemon做了处理,不过同时也把其他的> <等等都翻译了,这就更不对了..

本来我是打算在RSS里使用CDATA类型的description字段的,经过几番试验和测试,最后决定还是使用普通的description字段了,不在使用CDATA了.

CDATA? 鸡肋乎? 呵呵

posted on 2005-08-22 18:49 Scud(飞云小侠) 阅读(2515) 评论(0)  编辑  收藏 所属分类: Java

java cdata类,分析XML中的CDATA类型在RSS中的使用相关推荐

  1. Xml转Java实体类对象 xml转Javabena 对象 且多级嵌套 复杂嵌套

    最近在做企微开发,遇到了一个比较复杂的xml然后要去我将xml转成实体类 xml如下 <xml><ToUserName><![CDATA[toUser]]>< ...

  2. php 添加cdata,php生成xml时添加CDATA标签的方法

    php生成xml时添加CDATA标签的方法 发布于 2014-12-14 17:18:59 | 210 次阅读 | 评论: 0 | 来源: 网友投递 XML可扩展标记语言xml 即 可扩展标记语言 . ...

  3. php cdata,php生成xml时添加CDATA标签

    php生成xml时添加CDATA标签方法非常的简单,因为是一个在xml中可以存储各种内容的标签了,下面整理了一个例子希望对各位有帮助. 贴上代码留住伤疤,不要把当成前后缀,其实它可以是标签,代码如下: ...

  4. mysql数据库中常用的类型_MySQL数据库中常用字段类型

    MySQL数据库中常用字段类型 整数型:TINYINT,SMALLINT,INT,BIGINT 小数型:FLOAT,DOUBLE,DECIMAL(M,D) 字符型:CHAR,VARCHAR 日期型:D ...

  5. java测试类读取不到配置文件_java – 如何在单元测试中读取配置文件?

    我有一个标准的maven项目布局. 一些配置文件存储在src / main / conf中. 现在我想在src / test中的单元测试中读取这些文件(例如,从其中一个文件中读取属性). 我怎么能完全 ...

  6. php rss xml,php – 如何使用simplexml解析RSS中的标记

    http://www.cnn.com/intl_index.html ... http://www.cnn.com/2017/01/11/politics/russia-rejects-trump-a ...

  7. 凡是函数中未指定存储类型_函数中未指定存储类别的局部变量,其隐含的存储类别为()...

    展开全部 函数中未指定存储类别的局部变量,其隐含的存储类别为自动存32313133353236313431303231363533e59b9ee7ad9431333431353338储类别. 函数中的 ...

  8. Java的4种XML解析

    在平时工作中,难免会遇到把 XML 作为数据存储格式.面对目前种类繁多的解决方案,哪个最适合我们呢?在这篇文章中,我对这四种主流方案做一个不完全评测,仅仅针对遍历 XML 这块来测试,因为遍历 XML ...

  9. MyBatis由浅入深学习总结之二:MyBatis解决Java实体类和数据库表字段不一致方法总结

    在此,首先说明一点任何持久性框架都需要解决一个问题,那就是Java实体类的字段一般来说基本上会与数据库表中字段不一致,那么它们是如何解决的呢?咱们以Hibernate和SpringJDBC为例说明一下 ...

最新文章

  1. 【AI面试题】逻辑回归和线性回归的区别
  2. outlook搜索栏跑到上面去了_Outlook邮箱批量下载邮件附件+快速复制文件名
  3. 软件工程知识点总结(含各类软件工程各类图的画法)
  4. centos 7.6上面安装向日葵远程连接软件
  5. ColdFusion mx 7.0 函数分类列表
  6. python中iter是什么意思,python中iter的用途是什么?
  7. 启动Nginx时报错:error while loading shared libraries: librdkafka.so.1: cannot open shared object file: No
  8. 3rd TMA大数据营销案例征集赛正式启动,报名ing!
  9. 云会议是什么?如何提升云会议的协同能力?
  10. 使用css画太极,CSS画太极阴阳图
  11. ubuntu20.04下安装微信和qq
  12. 《清华园日记》读后感
  13. soso地图api接口poi检索示例----并在信息框显示经纬度
  14. c语言中do是什么用法,C语言基础知识:do while用法理解
  15. 安搭Share:小康时代新青年
  16. 软件测试-测试历史/职业发展
  17. 免费!iPhone北京用户大好消息:果粉欢呼/资源修复网易漫画,以上为今日内容...
  18. 微信接口连接和简单自动回复功能
  19. 分支限界——最大团问题
  20. ajax特殊字符转码,AJAX在GB2312的中文编码传输 AJAX特殊字符编码正确方法

热门文章

  1. linux修改分辨率的命令,linux更改分辨率命令行
  2. 文献阅读(24)KDD2020-GCC:Graph Contrastive Coding for Graph Neural Network Pre-Training
  3. PHP常用正则表达式汇总
  4. EasyExcel 集成国际化实现导入导出
  5. (Visual Navigation)点云转地图信息
  6. vue3 + ts + vite3 使用 腾讯地图api
  7. 新品亮相丨美格智能高性能Cat.1 bis模组SLM332X上市
  8. 【进阶版】机器学习之集成学习介绍、随机森林模型经验贴(12)
  9. 虚幻引擎(15)-暂停游戏
  10. php ajax传悚惧,错惹恶魔总裁