- 浏览: 162676 次
- 性别:
- 来自: 华东
文章分类
最新评论
-
chen_miao:
我是初学者,请问,我在flex设计好了带有按钮和下拉框的界面, ...
ruby+flex实现天气预报 -
barrytyh:
很多技术人员都有想法,但忘了一个根本性的问题,谁在给你MONE ...
互联网创业与软件开发 -
fireflyman:
囧......
关于并发和并行 -
fireflyman:
你老再次出现了
谈谈互联网新产品如何起步 -
qhh394141930:
写得很详细,受教了。谢谢!
从瀑布模型、极限编程到敏捷开发
REXML简要说明
http://www.germane-software.com/software/rexml/docs/tutorial.html
http://www.ruby-doc.org/stdlib/libdoc/rexml/rdoc/index.html
1、解析XML文件
require "rexml/document"
file = File.new( "mydoc.xml" )
doc = REXML::Document.new file
2、解析XML字符串
require "rexml/document"
include REXML # so that we don't have to prefix everything with REXML::...
string = <<EOF
<mydoc>
<someelement attribute="nanoo">Text, text, text</someelement>
</mydoc>
EOF
doc = Document.new string
有了Document之后,可以通过多种方式来访问其中的元素
○ Element 类有each_element_with_attributes方法,通常使用它来访问元素
○ Element.elements属性是一个Elements类的实例,可以通过Elements类的each和[]来访问其中的元素。这两个方法都支持使用XPath来进行过滤等操作,因此功能非常强大。
○ Element是Parent的子类,所以要访问元素的子节点,可以通过类似数组的方法,诸如Element[]、Element.each、 Element.find、Element.delete等。这是访问一个确实是数组的子节点的最快方式,不支持XPath搜索,并且所有的子节点元素都在这个数组中,不只是Element的子节点。
★ 在REXML中的Element子节点的索引从1开始,而不是0。因为XPath就是从1开始进行计数的,REXML维持了这种关系。
3、使用XPath
# The invisibility cream is the first <item>
invisibility = XPath.first( doc, "//item" )
# Prints out all of the prices
XPath.each( doc, "//price") { |element| puts element.text }
# Gets an array of all of the "name" elements in the document.
names = XPath.match( doc, "//name" )
4、使用Element.elements.to_a()方法,也可以得到匹配解决的数组。
all_elements = doc.elements.to_a
all_children = doc.to_a
all_upc_strings = doc.elements.to_a( "//item/attribute::upc" )
all_name_elements = doc.elements.to_a( "//name" )
5、手动添加元素的方式创建XML文档
require "rexml/document"
doc = REXML::Document.new "<root/>"
root_node = doc.root
el = root_node.add_element "myel"
el2 = el.add_element "another", {"id"=>"10"}
# does the same, but also sets attribute "id" of el2 to "10"
el3 = REXML::Element.new "blah"
el.elements << el3
el3.attributes["myid"] = "sean"
puts doc.to_s
输出:
<root><myel><another id='10'/><blah myid='sean'/></myel></root>
6、为Element添加文本
el1 = Element.new "myelement"
el1.text = "Hello world!"
# -> <myelement>Hello world!</myelement>
el1.add_text "Hello dolly"
# -> <myelement>Hello world!Hello dolly</element>
el1.add Text.new("Goodbye")
# -> <myelement>Hello world!Hello dollyGoodbye</element>
el1 << Text.new(" cruel world")
# -> <myelement>Hello world!Hello dollyGoodbye cruel world</element>
注意,这些Text对象仍然分开储存的;el1.text返回"Hello world!", el1[2]返回内容为"Goodbye"的Text对象。
7、REXML所有文本节点中都是以UTF-8编码的,所有调用的代码都要注意这一点,在程序中,传递给REXML的字符串必须是经过UTF-8编码的。
REXML不可能总是正确猜测出你的文本的编码方式,所以它总是假定为UTF-8编码。同时,如果你试图添加其他编码方式的文本,REXML不会发出警告。添加者必须保证自己添加的是UTF-8的文本。如果添加标准的ASCII 7位编码,是没有关系的。如果使用ISO8859-1文本,必须在添加之前转换为UTF-8编码。可以使用 text.unpack("C*").pack("U*")。变更编码进行输出,只有Document.write()和Document.to_s() 支持。如果需要输出特定编码的节点,必须用Output把输出对象包装起来。
e = Element.new "<a/>"
e.text = "f\xfcr" # ISO-8859-1 '??'
o = ''
e.write( Output.new( o, "ISO-8859-1" ) )
可以向Output传递任何支持的编码。
8、插入元素
两种方式:标准的Ruby数组表示法
doc = Document.new "<a><one/><three/></a>"
doc.root[1,0] = Element.new "two"
# -> <a><one/><two/><three/></a>
调用Parent.insert_before 或 Parent.insert_after
three = doc.elements["a/three"]
doc.root.insert_after three, Element.new "four"
# -> <a><one/><two/><three/><four/></a>
# A convenience method allows you to insert before/after an XPath:
doc.root.insert_after( "//one", Element.new("one-five") )
# -> <a><one/><one-five/><two/><three/><four/></a>
# Another convenience method allows you to insert after/before an element:
four = doc.elements["//four"]
four.previous_sibling = Element.new("three-five")
# -> <a><one/><one-five/><two/><three/><three-five/><four/></a>
9、元素的迭代
除使用Element.each方法迭代全部子节点之外,还有其他四种主要的遍历方式。 Element.elements.each,只对子元素进行遍历;Element.next_element和 Element.previous_element,用作取得下一个Element兄弟节点;Element.next_sibling和 Element.previous_sibling,用作取得下一个和上一个兄弟节点,不管其类型是什么。
http://www.germane-software.com/software/rexml/docs/tutorial.html
http://www.ruby-doc.org/stdlib/libdoc/rexml/rdoc/index.html
1、解析XML文件
require "rexml/document"
file = File.new( "mydoc.xml" )
doc = REXML::Document.new file
2、解析XML字符串
require "rexml/document"
include REXML # so that we don't have to prefix everything with REXML::...
string = <<EOF
<mydoc>
<someelement attribute="nanoo">Text, text, text</someelement>
</mydoc>
EOF
doc = Document.new string
有了Document之后,可以通过多种方式来访问其中的元素
○ Element 类有each_element_with_attributes方法,通常使用它来访问元素
○ Element.elements属性是一个Elements类的实例,可以通过Elements类的each和[]来访问其中的元素。这两个方法都支持使用XPath来进行过滤等操作,因此功能非常强大。
○ Element是Parent的子类,所以要访问元素的子节点,可以通过类似数组的方法,诸如Element[]、Element.each、 Element.find、Element.delete等。这是访问一个确实是数组的子节点的最快方式,不支持XPath搜索,并且所有的子节点元素都在这个数组中,不只是Element的子节点。
★ 在REXML中的Element子节点的索引从1开始,而不是0。因为XPath就是从1开始进行计数的,REXML维持了这种关系。
3、使用XPath
# The invisibility cream is the first <item>
invisibility = XPath.first( doc, "//item" )
# Prints out all of the prices
XPath.each( doc, "//price") { |element| puts element.text }
# Gets an array of all of the "name" elements in the document.
names = XPath.match( doc, "//name" )
4、使用Element.elements.to_a()方法,也可以得到匹配解决的数组。
all_elements = doc.elements.to_a
all_children = doc.to_a
all_upc_strings = doc.elements.to_a( "//item/attribute::upc" )
all_name_elements = doc.elements.to_a( "//name" )
5、手动添加元素的方式创建XML文档
require "rexml/document"
doc = REXML::Document.new "<root/>"
root_node = doc.root
el = root_node.add_element "myel"
el2 = el.add_element "another", {"id"=>"10"}
# does the same, but also sets attribute "id" of el2 to "10"
el3 = REXML::Element.new "blah"
el.elements << el3
el3.attributes["myid"] = "sean"
puts doc.to_s
输出:
<root><myel><another id='10'/><blah myid='sean'/></myel></root>
6、为Element添加文本
el1 = Element.new "myelement"
el1.text = "Hello world!"
# -> <myelement>Hello world!</myelement>
el1.add_text "Hello dolly"
# -> <myelement>Hello world!Hello dolly</element>
el1.add Text.new("Goodbye")
# -> <myelement>Hello world!Hello dollyGoodbye</element>
el1 << Text.new(" cruel world")
# -> <myelement>Hello world!Hello dollyGoodbye cruel world</element>
注意,这些Text对象仍然分开储存的;el1.text返回"Hello world!", el1[2]返回内容为"Goodbye"的Text对象。
7、REXML所有文本节点中都是以UTF-8编码的,所有调用的代码都要注意这一点,在程序中,传递给REXML的字符串必须是经过UTF-8编码的。
REXML不可能总是正确猜测出你的文本的编码方式,所以它总是假定为UTF-8编码。同时,如果你试图添加其他编码方式的文本,REXML不会发出警告。添加者必须保证自己添加的是UTF-8的文本。如果添加标准的ASCII 7位编码,是没有关系的。如果使用ISO8859-1文本,必须在添加之前转换为UTF-8编码。可以使用 text.unpack("C*").pack("U*")。变更编码进行输出,只有Document.write()和Document.to_s() 支持。如果需要输出特定编码的节点,必须用Output把输出对象包装起来。
e = Element.new "<a/>"
e.text = "f\xfcr" # ISO-8859-1 '??'
o = ''
e.write( Output.new( o, "ISO-8859-1" ) )
可以向Output传递任何支持的编码。
8、插入元素
两种方式:标准的Ruby数组表示法
doc = Document.new "<a><one/><three/></a>"
doc.root[1,0] = Element.new "two"
# -> <a><one/><two/><three/></a>
调用Parent.insert_before 或 Parent.insert_after
three = doc.elements["a/three"]
doc.root.insert_after three, Element.new "four"
# -> <a><one/><two/><three/><four/></a>
# A convenience method allows you to insert before/after an XPath:
doc.root.insert_after( "//one", Element.new("one-five") )
# -> <a><one/><one-five/><two/><three/><four/></a>
# Another convenience method allows you to insert after/before an element:
four = doc.elements["//four"]
four.previous_sibling = Element.new("three-five")
# -> <a><one/><one-five/><two/><three/><three-five/><four/></a>
9、元素的迭代
除使用Element.each方法迭代全部子节点之外,还有其他四种主要的遍历方式。 Element.elements.each,只对子元素进行遍历;Element.next_element和 Element.previous_element,用作取得下一个Element兄弟节点;Element.next_sibling和 Element.previous_sibling,用作取得下一个和上一个兄弟节点,不管其类型是什么。
发表评论
-
创建你自己的rails generator
2010-01-27 15:01 1224在多个rails项目中,有时需要共享一些公用的componen ... -
rspec实践一(从零开始)
2009-12-25 12:52 1381关于利用rspec的文章感 ... -
javascript-image-cropper-ui with rails
2009-07-31 23:18 1503在rails上传头像的过程中,一般后端会采用rma ... -
简简单单在rails中做定时任务
2009-07-27 19:58 3395在平时的开发过程中,经常会遇到一些定时任务的需求 ... -
用restful_authentication和role_requirement搭建验证授权系统
2008-09-30 21:20 1564转自 http://fanix.iteye.com/blog/ ... -
Rails中html_escape和sanitize
2008-09-26 13:33 2563转自:http://blackanger.blog.51cto ... -
Rails简洁的模板系统Malline
2008-09-14 15:25 1410前段时间听说ra ... -
在rails中优雅的进行模型校验
2008-09-07 20:53 2194在用rails进行开发时,最常见的操作的是前台提交 ... -
win+apache+mongrel下部署ROR
2008-09-01 20:16 1141gem install mongrel #选择最 ... -
Ruby中使用Memecached
2008-09-01 20:03 1304sudo apt-get install memcached ... -
在rails中使用memcached
2008-09-01 20:00 1131libeven memcached的使用需要li ... -
在Ruby中设计Callback机制
2008-08-31 21:11 1944阅读Paperclip源码,发现里面有一个不错的callbac ... -
我怎么就觉得rails适合做大型应用
2008-08-25 13:24 3521之前读了不少 ... -
像操作ActiveRecord一样操作XML
2008-08-10 18:05 1273在开发RESTful应用或者实现多个应用系统交互时 ... -
ImageMagick/Rmagick 安装的那些事儿
2008-08-05 12:54 1175windows平台×××××××××××××××××××××× ... -
让google来为rails画图表
2008-07-26 17:05 1371去年年底的时候,所做的一个rails项目涉及到图表 ... -
10分钟给一个rails遗留系统添加标签功能
2008-07-19 10:18 995早些时候做过了一个rails系统,当时没有涉及到标签的功 ... -
让rails处理图片再简单一点
2008-07-14 18:25 3066先来看看rails处理图片的过程吧,用户上传图片, ... -
分享一款word风格的rails在线编辑器
2008-07-09 16:51 1511在线编辑器是web应用中最常见的东西了,关于它的作用 ... -
让rails处理图片再简单一点
2008-07-07 12:50 1113先来看看rails处理图片的过程吧,用户上传图片, ...
相关推荐
总之,掌握如何在Ruby中使用REXML库处理XML,以及理解和应用XSLT和XPath,是任何希望提高Web开发效率的开发者不可或缺的技能。这不仅可以帮助开发者在Ruby on Rails等框架中更加高效地处理数据,还可以在各种不同的...
Ruby 使用 REXML 解析处理 XML REXML 是一个 Ruby 库,用于解析和处理 XML 文档。下面是使用 REXML 解析处理 XML 的一些知识点: 1. 基本使用:使用 REXML 解析 XML 文档,需要首先将 XML 字符串转换为 Document ...
在处理XML数据时,Ruby提供了一些库来方便我们读取、解析和操作XML文档。本篇文章将详细探讨“Ruby XML封装好的操作XML对象”的知识点,通过分析`xml_parse.rb`这个文件,我们将了解到如何在Ruby中有效地处理XML。 ...
本文主要介绍如何使用Ruby语言中的REXML库来解析XML格式的数据。REXML是一个完全由Ruby编写的库,提供了强大的XML处理能力。它支持两种主要的API:一种基于DOM(Document Object Model)的API,适用于处理较小的XML...
在处理XML编码问题时,REXML默认使用UTF-8编码,但可能需要根据实际情况调整。如果XML文件采用其他编码,确保在打开文件时指定正确的编码,或者在创建`Document`对象时指定编码。 总结起来,REXML是Ruby中处理XML...
综合这些信息,我们可以推测这篇博客可能讨论了如何在Ruby中使用XML,可能包括以下内容: 1. Ruby解析XML的基本步骤:介绍如何使用Nokogiri或REXML库加载XML文档,遍历节点,提取数据。 2. XML与Ruby的交互:讲解...
在Ruby编程中,处理XML格式的数据是一项常见的任务,而REXML库提供了一个方便的接口来解析和操作XML文档。本篇文章将深入探讨如何在Ruby程序中利用REXML库解析XML格式的数据。 首先,我们要了解REXML的基本概念。...
在处理XML数据时,Ruby的REXML库能够解析和生成XML文档,支持XML数据的提取和操作。 总的来说,Ruby是处理文本数据的强大工具,它的字符串操作能力极其强大,且对处理CSV和XML等常见文本格式提供了现成的模块库。...
- Nokogiri通常比REXML更快,尤其是在处理大型XML文档时,因为它使用了更高效的C库。 - REXML更适合轻量级任务或作为学习XML处理的基础。 通过博客“ruby操作xml”,我们可以学习到如何利用Ruby有效地处理XML文档...
在Ruby编程中,处理XML文件是一项常见的任务,无论是为了数据交换、配置文件还是其他用途。本文将深入探讨如何使用Ruby中的`Builder`库来创建XML文件,以及如何利用`ReXML`库进行XML解析。 首先,让我们详细了解`...
要求xml_fragment模块由基于Ruby的提供程序驱动,因此它应可在大多数操作系统上运行。 到目前为止,它仅在Windows Server 2012的Puppet Agent 3.8.0上进行了测试,尽管它可能会在其他版本上运行。 请让我知道您使用...