- 浏览: 454838 次
- 性别:
- 来自: Runner
文章分类
- 全部博客 (97)
- commons (3)
- EJB3 (5)
- liferay (1)
- 设计模式 (1)
- JBoss (1)
- 常用 (6)
- guice (4)
- JAX-WS (1)
- 持久层处理 (3)
- 单元测试 (3)
- jmesa (6)
- mongodb (3)
- View显示 (6)
- lucene (1)
- struts2 (2)
- spring security (2)
- spring (4)
- hibernate (1)
- mysql (1)
- ruby (21)
- python (2)
- ubuntu (1)
- ibatis (2)
- javascript (3)
- 数据库 (1)
- swing (1)
- java基础 (2)
- dojo (1)
- android (9)
最新评论
-
BigHanson:
写得非常棒,醍醐灌顶 可以转发吗
spring security验证流程 -
背后的光:
spring security验证流程 -
hanlongjie:
commons-lang(time应用) -
litianpeng:
虽然是2009年写的帖子 不过还是要请问一下先生 我按照你的 ...
Ajax Fancy Capcha -
蔡小鱼:
ibatis总结
最近想用ruby写个能生成ibatis sqlmap的xml文件,以前一直没注意,找了下才发现自带的包中就有,那就是rexml,在生成普通的文本内容时没什么问题,今天突然准备把有些sql语句放在
<![CDATA[ ]]>里面,结果就是不能成功。不管怎么放,“〈〉”这两个尖括号都会被转义,在网上找了下也没发现什么答案,小众语言就是这样,找资料难。
好不容易找到了一个关于cdata.rb的内容,虽然没怎么说清楚,但至少提供了思路,于是自己就看了下ruby lib中的cdata.rb的源码,有一个write可以用,用法如下:
这个方法应该可行,它也继承自Text,也就是用于Text的地方也可用于CData,但是这个方法却写着deprecated标记,注释上说去看 rexml/formatters,于是自己找到该目录,下面有三个文件:default.rb pretty.rb transtive.rb,那么自己用的又是那个formatter呢? 由于输出的代码是这句:
于是自己找到document的write方法:
因为indent为4,所以应该采用的是Pretty这个formatter,毫不犹豫的打开pretty.rb这个文件,看了几分钟,除了一个名叫write_cdata的方法有点像以外,没发现什么特别的:
但这个方法也没什么特别的,非常的普通,怎么看都不会输出"<![CDATA ]]>"这些东西,于是只能看看其父类有没有什么特别的了。因为pretty的父类是default,于是找到default的write_cdata方法:
答案找到了,问题似乎解决了,于是自己写了个简单的语句测试了下:
但控制台提示write_cdata方法是pretected的,外部不能使用,那怎么办呢?最后看了半天才找到答案,自己忽略了document中write的最后一句话:
这句话比较关键,于是找到Default的write方法:
终于找到答案了,内容的格式是由node的类型决定的,也就是说,只要创建一个CData对象,将此对象赋给Text即可,document知道怎么输出:
这样输出的xml就会包含在"<![CDATA[]]>"内。而且由上面default.write方法可以看出,如果要加入其它结点类型,比如Comment、DocType、XMLDecl等类型时,只需要创建相应的对象,然后添加进相应的对象即可,相应的格式自然就可以生成了。
这个问题几乎花了自己一上午的时间,虽然ruby以前也有学过,但一直没怎么用,几乎都忘光了,昨几天才书店偶然看见了ruby之父松本行弘(这个名字很不好记)的一本书叫 松本行弘的程序世界,发行这本书写得挺不错的,上面说到可以用ruby来写些工具类用用,于是再次拿起原来的那本ruby programming看了看,两三天的时间基本上就把生成ibatis的sqlmap文件,基本的dao、service、domain之类的东西就写成了,效率确实远高于用java来写,然后在网上把那本<松本行弘的程序世界>买了下来(网上买七五折不加邮费,确实比书店的便宜多了,鄙人在新华书店买了不少书,从来没打折)。ruby确实是一门很有意思的语言,在开发过程中总会有些地方让自己惊讶与欣喜,这是使用其它任何语言都未有过的,特别是java,用java开发程序这么久,基本上都是厌倦。
10.19:另外,如果想在各个element这间加上空白换行符,如:
这个问题本人看了文档,主要看了Element与 Document这两个类,均没有什么收获,于是再去看了下Formatters模块的Pretty,也没发现什么参数可用,看来只能改源代码了。直接修改Pretty的write_element方法:
也就是在该元素最后一行加上换行符就行了。
<![CDATA[ ]]>里面,结果就是不能成功。不管怎么放,“〈〉”这两个尖括号都会被转义,在网上找了下也没发现什么答案,小众语言就是这样,找资料难。
好不容易找到了一个关于cdata.rb的内容,虽然没怎么说清楚,但至少提供了思路,于是自己就看了下ruby lib中的cdata.rb的源码,有一个write可以用,用法如下:
c = CData.new( " Some text " ) c.write( $stdout ) #-> <![CDATA[ Some text ]]>
这个方法应该可行,它也继承自Text,也就是用于Text的地方也可用于CData,但是这个方法却写着deprecated标记,注释上说去看 rexml/formatters,于是自己找到该目录,下面有三个文件:default.rb pretty.rb transtive.rb,那么自己用的又是那个formatter呢? 由于输出的代码是这句:
doc.write(xmlFile,4)
于是自己找到document的write方法:
def write( output=$stdout, indent=-1, transitive=false, ie_hack=false ) if xml_decl.encoding != "UTF-8" && !output.kind_of?(Output) output = Output.new( output, xml_decl.encoding ) end formatter = if indent > -1 if transitive require "rexml/formatters/transitive" REXML::Formatters::Transitive.new( indent, ie_hack ) else REXML::Formatters::Pretty.new( indent, ie_hack ) end else REXML::Formatters::Default.new( ie_hack ) end formatter.write( self, output ) end
因为indent为4,所以应该采用的是Pretty这个formatter,毫不犹豫的打开pretty.rb这个文件,看了几分钟,除了一个名叫write_cdata的方法有点像以外,没发现什么特别的:
def write_cdata( node, output) output << ' ' * @level super end
但这个方法也没什么特别的,非常的普通,怎么看都不会输出"<![CDATA ]]>"这些东西,于是只能看看其父类有没有什么特别的了。因为pretty的父类是default,于是找到default的write_cdata方法:
def write_cdata( node, output ) output << CData::START output << node.to_s output << CData::STOP end
答案找到了,问题似乎解决了,于是自己写了个简单的语句测试了下:
t = REXML::Formatters::Default.new puts t.write_cdata("fff",$stdout);
但控制台提示write_cdata方法是pretected的,外部不能使用,那怎么办呢?最后看了半天才找到答案,自己忽略了document中write的最后一句话:
formatter.write( self, output )
这句话比较关键,于是找到Default的write方法:
def write( node, output ) case node when Document if node.xml_decl.encoding != "UTF-8" && !output.kind_of?(Output) output = Output.new( output, node.xml_decl.encoding ) end write_document( node, output ) when Element write_element( node, output ) when Declaration, ElementDecl, NotationDecl, ExternalEntity, Entity, Attribute, AttlistDecl node.write( output,-1 ) when Instruction write_instruction( node, output ) when DocType, XMLDecl node.write( output ) when Comment write_comment( node, output ) when CData write_cdata( node, output ) when Text write_text( node, output ) else raise Exception.new("XML FORMATTING ERROR") end end
终于找到答案了,内容的格式是由node的类型决定的,也就是说,只要创建一个CData对象,将此对象赋给Text即可,document知道怎么输出:
_cdata = CData.new "select * from \n(select rownum as r,s.* from (select #{_field_as_attr*','} from #{@@table}" _select_all.text=_cdata
这样输出的xml就会包含在"<![CDATA[]]>"内。而且由上面default.write方法可以看出,如果要加入其它结点类型,比如Comment、DocType、XMLDecl等类型时,只需要创建相应的对象,然后添加进相应的对象即可,相应的格式自然就可以生成了。
这个问题几乎花了自己一上午的时间,虽然ruby以前也有学过,但一直没怎么用,几乎都忘光了,昨几天才书店偶然看见了ruby之父松本行弘(这个名字很不好记)的一本书叫 松本行弘的程序世界,发行这本书写得挺不错的,上面说到可以用ruby来写些工具类用用,于是再次拿起原来的那本ruby programming看了看,两三天的时间基本上就把生成ibatis的sqlmap文件,基本的dao、service、domain之类的东西就写成了,效率确实远高于用java来写,然后在网上把那本<松本行弘的程序世界>买了下来(网上买七五折不加邮费,确实比书店的便宜多了,鄙人在新华书店买了不少书,从来没打折)。ruby确实是一门很有意思的语言,在开发过程中总会有些地方让自己惊讶与欣喜,这是使用其它任何语言都未有过的,特别是java,用java开发程序这么久,基本上都是厌倦。
10.19:另外,如果想在各个element这间加上空白换行符,如:
<select id="getUserTypeNextId" resultClass="long"> </select> <insert id="addUserType" parameterClass="userType"> </insert> <update id="updateUserType" prameterClass="string"> </update> <delete id="deleteUserType" parameterClass="string"> </delete>
这个问题本人看了文档,主要看了Element与 Document这两个类,均没有什么收获,于是再去看了下Formatters模块的Pretty,也没发现什么参数可用,看来只能改源代码了。直接修改Pretty的write_element方法:
def write_element(node, output) ......... end output << ">" output << "\n" end
也就是在该元素最后一行加上换行符就行了。
- crud_10.21_.rar (5.8 KB)
- 下载次数: 6
发表评论
-
ruby生成java文件的工具
2012-05-17 14:41 1567java开发的很多代码都是 ... -
ruby的require加载
2011-11-15 10:18 3229ruby没有像java那种严格的包管理机制,因此引用起来就有些 ... -
windows上使用mysql2
2011-11-14 14:47 1373想在windows上做ruby应该的可能很底,ruby服务器在 ... -
ruby处理未定义的方法
2010-10-08 17:52 1558关于未定义的方法,《ruby编程语言》上面说得比较詳細了,所以 ... -
rails3的删除问题
2010-08-25 00:38 1644Rails 3所做的很大一个改进就是:Unobtrusive ... -
ROR+mysql的中文问题
2010-08-24 15:28 2275环境: os: ubuntu 10.04 ru ... -
Ubuntu上搭建ruby1.9.2 on rails3rc
2010-08-20 13:34 2227linux的分支不同使用起来还是有很多差别的,最近想用一下比较 ... -
rails3之ActionController
2010-07-29 21:36 3615rails3中有许多变化,现 ... -
windows运行rails3
2010-07-29 11:19 3326虽然rails3的beta版已经出来很久了,但一直没正式版,最 ... -
ruby之enumerator
2010-07-22 00:25 3542由于版本的变更,1.8与1.9在许多地方是不一样的,API变化 ... -
ror中属性值存储的处理
2010-07-19 02:11 1303今天细看了quakewang的那 ... -
一个简单rails应用的开发过程
2010-07-03 16:06 1602基本环境: rails2.3.8 ruby ... -
windows 上使用mongrel
2010-06-30 19:04 2891由于ruby自带了一个webrick的嵌入式服务器,所以以前都 ... -
redmine 一个不错的ror开源项目管理系统
2010-06-30 01:19 2637学了一段时间的ruby,想做点东西,折腾了一下wxruby,但 ... -
ruby的时间与日期
2010-06-04 10:22 4358最近心情稍微好一点,正好现在难得的清闲,于是看了一下ruby的 ... -
ruby的模块
2010-05-20 17:16 1853模块的定义跟类非常相似,只是用module关键字取代class ... -
ruby方法
2010-05-19 15:29 1900没事做,写着玩的。不过ruby的block,proc,闭包或l ... -
ruby 创建基本的类
2010-05-18 11:15 1145由于ruby的语法很多,看 ... -
ruby编程题
2010-05-15 23:43 1812学了一段时间ruby后,又学了段时间python,学了pyth ... -
ruby on rails入门基础
2010-04-10 01:33 3166最近有想学一下ruby on rails的冲动,JAVA这东西 ...
相关推荐
本文档包含了一个完整的实例,可以实现含有CDATA 的字符串转换成xml
asp.net3.5及以上版本自带序列化类读写XML中的cdata数据(JSON数据格式),看代码就明白。
XML 元素中,"和 "&" 是非法的。"会产生错误,因为解析器会把该字符解释为新元素的开始。"&" 也会产生错误,因为解析器会把该字符解释...[CDATA[文本内容]]>CDATA的文本内容中不能出现字符串“]]>”,另外,CDATA不能嵌套。
XML:标签CDATA用法 XML:标签CDATA用法
android 使用saxparser 解析<![CDATA[ ]]>标签数据。 见附件实例
javascript语句中的CDATA标签的意义
H3CData高校大数据解决方案
(2) 转义序列必须以” (3) 单独出现的”&”不会被认为是转义的开始 (4) 区分大小写 (2) 不允许嵌套使用 (3)”]]>”这部分不能包含空格或者换行
C资料大全,供各位学习C语言时参考之用。如发现有错误请即时与我联系。
CDATA是在XML文档里面使用的关键字,用来告诉浏览器,这部分内容不用解析,是给其他程序用的,比如JAVASCRIPT等等。 PCDATA是在 XML约束文档里使用的,如DTD类型的约束文档,在这里面表示元素的内容或属性的取值范围...
数据库相关,CDATA和PCDATA的区别和用法
主要介绍了php生成xml时添加CDATA标签的方法,实例讲述了php操作XML文件的技巧,非常具有实用价值,需要的朋友可以参考下
本文给大家解析使用<![CDATA[ ]]>解决xml文件不被转义的问题, 对mybatis 中的<![CDATA[ ]]>相关知识感兴趣的朋友一起看看吧
[CDATA[<h2>.NET 开发]]> <siteurl>//www.jb51.net</siteurl></net>我们可以采用下面的方法修改 CDATA 节点的内容。 C# 代码 代码如下:System.Xml.XmlDocument d = new System.Xml.XmlDocument();d.Load(Server....
H3CData网络流量分析一体机WEB配置手册_V2.0(20190110).docx
本文实例讲述了asp.net实现在XmlTextWriter中写入一个CDATA的方法。分享给大家供大家参考,具体如下: 在CDATA可以用来写出像 ,[removed]这个样的HTML标记或任何其他标记。您不能添加一个简单的写...
页里面 CDATA的作用说明
首先看实例代码: 昨天读取了以下XML, 之前没有读取过类似的格式,用一种比较笨的方法读取的,记录下 <?xml version=1.0?> <srvver>1.0 <srvcode>000 ...[CDATA[ 执行成功!/> <Paramet
尝试使用此问题的解决方案[^],或使用此项目[^]或谷歌搜索其他内容:)