我对 Ruby 很陌生,并试图用 REXML 解析一个 XML 文档,该文档以前已经漂亮地打印(由 REXML),结果有些不稳定。
一些 CDATA 部分在开始 XML 标记之后但在 CDATA 块开始之前有一个换行符,在这些情况下,REXML 将标记的文本解析为空。
- 知道我是否可以让 REXML 阅读这些行吗?
- 如果没有,我可以用正则表达式或其他东西重新编写它们吗?
- 这甚至是有效的 XML 吗?
这是一个示例 XML 文档(删节很多):
<?xml version="1.0" encoding="utf-8"?>
<root-tag>
<content type="base64"><![CDATA[V2VsbCBkb25lISBJdCB3b3JrcyA6KQ==]]></content>
<content type="base64">
<![CDATA[VGhpcyB3b250IHdvcms=]]></content>
<content><![CDATA[This will work]]></content>
<content>
<![CDATA[This will not appear]]></content>
<content>
Seems happy</content>
<content>Obviously no problem</content>
</root-tag>
这是我的 Ruby 脚本(精简为一个最小示例):
require 'rexml/document'
require 'base64'
include REXML
module RexmlSpike
file = File.new("ex.xml")
doc = Document.new file
doc.elements.each("root-tag/content") do |contentElement|
if contentElement.attributes["type"] == "base64"
puts "decoded: " << Base64.decode64(contentElement.text)
else
puts "raw: " << contentElement.text
end
end
puts "Finished."
end
我得到的输出是:
>> ruby spike.rb
decoded: Well done! It works :)
decoded:
raw: This will work
raw:
raw:
Seems happy
raw: Obviously no problem
Finished.
我在 OSX Lion 上使用 Ruby 1.9.3p392。练习的目标最终是将一些 BlogML 中的评论解析为 Disqus 使用的自定义导入 XML。