- 浏览: 111332 次
- 性别:
- 来自: 北京
最新评论
-
adidaskebi123:
不错,最近小弟正在接触部署方面的东西
capistrano 部署rails -
kfw5313:
呵呵 路过 我孔繁伟
e-texteditor 与cygwin 开发rails -
lgn21st:
这个用的是Prototype,有时切图时CPU占用率较高,比较 ...
ramgick 剪切用户头像 -
chinapkw:
难道我的权限还不够,不能上传附件,晕掉。。
你在网上找一下C ...
ramgick 剪切用户头像 -
qianjigui:
加问一句,那个view需要些什么代码?谢谢!
ramgick 剪切用户头像
原文:http://xerdoc.com/blog/archives/188.html
XML大家都很熟悉,那也就不需要怎么解释了。这里所说的Rails指的就是目前正如火如荼发展的Ruby on Rails,因为他的方便快捷,越来越多的人开始对他进行学习和研究。本篇的目的是为了介绍在使用RoR搭建网站时对XML的处理,例如RSS文件的生成等等。首先不得不对这个东西的整体大概介绍一下。
Ruby是早年日本人写出来的一个解释型语言,同Python、Perl非常相似,但是更为突出的一点就是他的OO特性,尤其在Rails中。语法其实也不是很难,我差不多花了两天时间大致了解了整体的语法特性。整体来说与Perl比较类似(跟吉子讨论之后总结出来的)。个人觉得比较难以理解和记忆的包括两点:一是$变量,类似于Perl中的$变量,比如$!总是表示最近发生的错误,$1表示正则表达式匹配的第一部分等等,因为实在是很多,所以记忆起来确实还是比较头疼的;第二是Block语法,Ruby中比较强大的一点也是这个,即增强了对于容器迭代处理的本领,拿Java的处理来做个比较,比如在Java1.4中对于一个列表的迭代处理可以是这样的:
在Java5.0中对于迭代也是加强了很多,可以这样做:
在Ruby中就可以这样写:
其实看上去没有什么特殊的,呵呵,不过玄机是在这个list.each里面,在实现中会用一个yield来呼喊跟在后面的Block对象,理解上也不是很困难,不过看一个例子:
这段败家玩意是用来算菲波那切数列的,我头一天几乎就晕菜在这了,后来才慢慢明白。以上就是我所感觉Ruby中比较困难的一些地方。
下面来说说Rails,呵呵
Rails可以说是一个很成功的MVC的框架,他的作者也在最近的OSCON大会上被Google、Yahoo等多个商家评为本年度最佳Hacker。现在每天Rails的邮件列表大概我都会收到7、80封信。Rails用的最多的演示就是搭建Blog,我看了几个,感觉就是使用Rails基本上10分钟左右就能搭建出一个雏形的Blog系统,包括发贴、删除、更新、Comment等等,让人感觉确实非常的惊讶,初期Rails的学习曲线不是很平缓,因为使用Rails建立一个工程,就像MFC一样,编译运行,一个页面就出来了,然后一堆目录文件都摆在那里,根本不知道什么是什么,不过跟随一个例子慢慢做,很快就能上手,然后多多利用Rails Wiki和Maillist,基本上都能找到答案。
ok,进入正题,Rails对于XML的操作。一般无非也就是两种,创建XML,比如生成RSS文件,另一种就是解析,比如做个RSS阅读器等等,那今天先来搞搞怎么生成XML,因为这个相对简单一些,:P(Rails的Wiki中有一部分内容),我们也可以以RSS为例。希望大家是在对Rails有了一定了解之后,尤其是Rails的Views的概念之后可以来看看这个,呵呵。
XML其实跟HTML一样都可以是Rails框架中的一个视图,通过Controller来控制View的产生。一般来说需要作的第一步就是把HTTP的协议头改了,因为我们知道HTML和XML的HTTP协议头不是完全一样的,非常简单,比如我们有一个RSS Controller,rss这个动作是用来生成RSS XML的,简单的snippet如下:
第二步就是要生成rss视图的模板。在Rails中,模板是视图不可缺少的一部分,模板也是直接展现给用户的结果。一般的Rails模板都是rhtml文件,对于我们的例子,rss的模板需要是生成xml的,所以,就是rss.rxml。在Rails中,处理和使用rxml模板文件的工作是由Rxml Builder来完成的,就像他的项目介绍所说的“Provide a simple way to create XML markup and data structures.”真的非常简单。
比如,我们需要先生成xml的instruct行
在rxml文件中对应的就是
xml.instruct!用来控制产生xml中instruction,类似于xml的头等等,通过可变长的参数可以改变改节点的属性值;
然后需要产生RSS的根节点,比如我们使用RSS 2.0规范
上面的snippet显示了如何生成节点,并且包括了他的属性,比如版本是2.0,使用dc的namespace,比如我们需要在RSS中支持dc:creator来标明作者是谁。那么又有一个问题了,就是xml对于数据树型结构的描述,这点完全不是问题,程序结构同生成XML的结构非常类似,不象以前要写某某节点appendChild什么的,在Rails的rxml中,非常简单
从上面的框架直接生成了xml的树型框架,完全用程序的嵌套特性完成了对于XML树型数据结构的构造,简单吧。其实基本上上述就涵盖了构建XML文件的内容了,不过我在做的时候遇到了一个问题,就是节点的namespace,比如我们要建立一个节点dc:creator,或者rdf:resource等等,查了一下,因为“:”是Ruby的语法字符,不能向上面那么使用,所以rxml builder有一个方法,叫做xml.tag!,用来专门处理这个,例如
Ruby中有很多有意思的函数,比如isXXXX?,string.sub!,就是函数后面可以用?!这种来表示一定的含义,比如?就是表示布尔函数,!一般表示对原对象的状态或者数据会有修改甚至破坏可能的函数,所以觉得这样写比较ugly,于是接着找,找到了一句话
for( int i = 0; i < list.size(); ++i) { String aString = (String)list.get(i); System.out.println(aString); }
for(String aString: list) { System.out.println(aString); }
list.each { |aString| puts aString}
def fibUpTo(max) i1, i2 = 1, 1 # parallel assignment while i1 < = max yield i1 i1, i2 = i2, i1+i2 end end fibUpTo(500) { |f| print f, ' ' } #1 1 2 3 5 8 13 21 34 55 89 144 233 377
class RSSController < ApplicationController before_filter :set_xml_header # action to create rss xml file, but have to change # HTTP header before def rss end def set_xml_header @headers['Content-Type'] = 'text/xml; character=utf-8' end end
<!---->
xml.instruct!
xml.rss, :version => '2.0', 'xmlns:dc' => 'http://purl.org/dc/elements/1.1/'
xml.rss, :version => '2.0', 'xmlns:dc' => 'http://purl.org/dc/elements/1.1/ do xml.channel ... do xml.title ... xml.link ... xml.item ... do xml.title ... ... end end end
xml.tag! ('SOAP:Envelope') # produces <soap:envelope>...</soap:envelope>
Direct support for XML namespaces is now available. If the first argument to a tag call is a symbol, it will be joined to the tag to produce a namespace:tag combination. It is easier to show this than describe it.
于是,现在就可以直接写成:
呵呵,这样就比较好看了。
xml.dc :creator, 'Winters Mi' #produces <dc:creator>Winters Mi</dc:creator>
今天就先到这里,后面会正确搞一搞解析XML的,据我所知,目前Ruby打包的XML解析器是rexml,曾经试用过,根Java也是没有多大区别的,然后目前也有一个FeedTools,是专门支持Rails中对于RSS的解析的,目前主要版本的RSS都支持。学习Rails很快,作起来也很快,目前看比较适合概念展示用的原型系统等,大型的应用还没有看到,不过一些老外的网站也都开始招RoR的开发人员了。还是感觉,如果有什么新的想法,可以很快用RoR搞一个出来,也应了Keso引用的那句话,要“早发布、常发布”,呵呵。
发表评论
-
ramgick 剪切用户头像
2008-06-27 16:27 1705以前在别的论坛,或网站。上传头像时。总是不是很好,有的直接缩略 ... -
railslogVisualizer and Ruby on Windows Mobile 5
2008-06-17 11:16 1126可视化的rails log分析工具,在网上找了一些都是很老的版 ... -
CommunityEngine plugin for ruby
2008-06-13 16:09 1414http://missingmethod.brunoborns ... -
typo rails 的开源 blog
2008-06-12 13:28 2116小巧精致。 https://rubyforge.org ... -
e-texteditor 与cygwin 开发rails
2008-06-03 17:31 3104用netbeans 开发rails 有一年时间了。受禁了折磨。 ... -
rails2.0 安装beast
2008-06-03 00:29 2267今天想安装一下beast看看.毕竟用rails 这么久了. 本 ... -
可拖拽,保存展开收起状态的个人主页
2008-01-12 11:57 2620<li id="my_list_b" ... -
安装rails2.0
2007-12-19 00:19 1912rails 2.0 终于发布了。呵 装上试一下新功能。gem ... -
cache_count
2007-11-21 14:31 1314ruby 代码 #thingsuser.rb ... -
rails 常用文件操作
2007-11-20 13:40 47require 'mockfs' ... -
ruby jmaki on netbeans
2007-11-09 12:15 1266jMaki是SUN支持的一个AJAX框架。这个 ... -
freeze gems
2007-11-07 12:02 1145rake rails:freeze:gems表示把当前Gems ... -
Drag and Drop and Sortable Elements
2007-10-30 18:27 1800xml 代码 Drag and Drop an ... -
rss
2007-10-09 10:44 1405通过BAIDU的快照看到这个文章的,原文章地址已经打不开了,只 ... -
rake
2007-09-21 14:56 1341转自:http://blog.csdn.net/s ... -
db:migrate简明指南
2007-08-06 17:14 3451首先,确保你已经配置好了database.yml,假设我们要创 ... -
write a plugin for rails
2007-08-06 14:14 1544A few days back I posted my ver ... -
swfupload 上传文件,带进度条 ruby on rails 应用
2007-08-03 10:45 4842公司的相册想要做上传文件的方案。本来用file_column ... -
capistrano 部署rails
2007-07-18 18:04 11740转自石锅拌饭,察 ... -
rails实现验证码
2007-07-07 16:09 14421.在windows上安装Rmagic,如果你是通过gem ...
相关推荐
方法B则利用Rails的模板系统来生成RSS Feed。在控制器中,定义同样名为`feed`的方法: ```ruby def feed @posts = Post.find(:all, :order => 'id DESC') end ``` 接着,创建一个erb模板`views/post/feed.atom....
Rails框架中的Scaffolding工具是一种自动生成控制器、视图和模型的机制,极大地加速了开发过程。当使用Scaffolding时,开发者可以快速搭建起符合REST风格的基础应用程序,包括基本的CRUD操作。这不仅节省了大量的...
7. **RSS订阅**:自动生成RSS feed,方便订阅者获取最新内容。 8. **统计分析**:提供基础的访问统计,如访问量、页面浏览等,还可以集成Google Analytics等第三方统计工具。 9. **安全与备份**:Publify有安全...
- **辅助函数**:讲解如何使用Rails提供的辅助函数来简化HTML和CSS的生成。 - **表单处理**:说明如何构建和处理Web表单,以及如何使用Rails的表单助手。 - **布局设计**:教授如何使用布局文件来共享通用的页面元素...
总之,这个GitHub活动RSS提要应用是一个基于Ruby的Web服务,它可以生成RSS订阅链接,帮助你轻松获取和跟踪GitHub上的个人或组织活动。通过创建无权限的访问令牌和(如果需要)OAuth应用,你可以确保安全地连接到...
cp .docker.env .env生成图像。 docker-compose build构建映像或破坏堆栈后,您必须使用以下命令重置数据库。 docker-compose run --rm rails bundle exec rails db:createdocker-compose run --rm rails bundl
该项目是通过引导的。... 使用AJAX请求获取数据与API后端集成节点Ruby on Rails 在开发中代理API请求配置代理后出现“无效的主机头”错误手动配置代理配置WebSocket代理在开发中使用HTTPS 在服务器上生成动态<met
该项目是通过引导的。 您将在下面找到一些有关如何执行常见任务的信息。 您可以在找到本指南的最新版本。 目录 自动格式化代码 更改页面<title> 安装依赖项 ... 在服务器上生成动态<met
此外,还支持通过邮件通知和RSS订阅来实时跟进问题的进展。 7. **版本控制集成**:Redmine可以与Git、SVN等版本控制系统集成,显示代码变更历史,关联问题和版本,帮助团队更好地管理代码。 8. **时间跟踪**:对于...
Rails框架是Ruby的一个流行选择,它提供了MVC(模型-视图-控制器)架构,使得开发高效且结构清晰。例如,使用ActiveRecord处理数据库操作,通过ActionController处理HTTP请求,并用ERB(Embedded Ruby)模板生成HTML...
- **生成报表**:根据记录的时间生成统计报表,分析项目进度。 ##### 5. 其他功能 - **Wiki文档**:创建项目文档,方便团队成员查阅。 - **新闻公告**:发布项目更新或重要通知。 - **问题跟踪**:跟踪项目中的...
- **CakePHP**: 基于MVC的开源PHP框架,灵感来源于Ruby on Rails。 - **Savant2**: 另一个PHP模板引擎,强调简洁和性能。 这些工具和框架覆盖了PHP开发的各个方面,从调试到测试,再到文档生成和安全防护,以及...
- 后端框架:如Django、Ruby on Rails、Express.js等,处理服务器端逻辑和数据交互。 - 数据库管理:MySQL、MongoDB、PostgreSQL等,存储和检索网站数据。 - API集成:利用RESTful API或GraphQL与第三方服务进行...
1. **Laravel框架**: Laravel是由Taylor Otwell开发的,其设计灵感来源于Ruby on Rails。Laravel引入了MVC(模型-视图-控制器)架构模式,简化了Web开发流程,提供了丰富的特性如路由、中间件、Eloquent ORM、...
虽然具体技术栈未在标签中提及,但为了处理用户登录、音频文件存储、RSS生成等功能,Weavercast很可能使用了某种后端框架,如Node.js(搭配Express)、Django或Ruby on Rails。数据库系统(如MySQL、PostgreSQL或...
Redmine是一款基于Ruby on Rails(ROR)框架开发的开源项目管理系统,它以其灵活的项目管理功能和丰富的集成能力而受到广泛欢迎。Redmine的设计灵感来源于Basecamp的ROR版本,它不仅支持多种数据库,还能与多种版本...
- **Ruby on Rails风格**: 类似于Ruby on Rails的设计理念,具有相似的ActiveRecord功能。 - **文档**: 文档相对较少,限制了用户的理解和学习过程。 - **Ajax支持**: 内置了Ajax支持,增强了用户体验。 ### 结论 ...
17. **开发工具**:最后介绍了Ruby开发过程中的各种工具,包括集成开发环境(IDE)、文档生成工具等。 通过以上内容的详细讲解,《The Ruby Way》第二版为读者提供了全面且深入的Ruby编程知识体系,无论是对于初学者...
- **作用**:用于处理 RSS 和 Atom 格式的 Feed 数据。 - **特点**:可以方便地从 Feed 中提取信息,也可以生成自己的 Feed。 ##### 3.4 Zend_Filter - **作用**:提供了多种过滤器,用于数据的格式化和清理。 - *...