【发布时间】:2011-03-13 14:58:17
【问题描述】:
我正在使用 Ruby 从 XML 网络服务中读取一些数据,如下所示:
<phrases>
<phrase language="en_US">¡I'm highly annoyed with character references!</phrase>
</phrases>
我正在解析 XML 并获取一组短语。如您所见,短语文本包含一些XML character entity references。我想用被引用的实际字符替换它们。这对于数字引用来说很简单,但对于 XML 和 HTML 引用就很麻烦了。我想避免在我的代码中包含每个 XML 或 HTML 字符引用的字符的大哈希,即http://www.java2s.com/Code/Java/XML/Resolvesanentityreferenceorcharacterreferencetoitsvalue.htm
肯定有这个库,对吧?
更新
是的,那里有一个图书馆,它叫HTMLEntities:
: jmglov@laurana; sudo gem install htmlentities
Successfully installed htmlentities-4.2.4
: jmglov@laurana; irb
irb(main):001:0> require 'htmlentities'
=> []
irb(main):002:0> HTMLEntities.new.decode "¡I'm highly annoyed with character references!"
=> "¡I'm highly annoyed with character references!"
【问题讨论】:
-
&gt;和&lt;怎么样?如果替换 所有 实体,可能会破坏格式良好的 XML。 -
Matt,我正在处理的数据已经被 XML 解析过了;我在这里处理 CDATA,所以我希望解决所有实体。我将更新问题以明确这一点。
-
那么您有一个数据本身包含实体的 XML 文档? (即您有 ASCII 字符串
&nbsp;的 XML 表示,而不是不间断空格的 XML 表示?)。 -
应该指出
&nbsp;不是原生的XML 实体。它出现在 XHTML 中是因为 XHTML 的 DTD 定义了它。 -
mu,感谢您提供How to encode/decode html entities in ruby 问题的链接。其中的解决方案让我大部分时间都受益;我仍然需要处理烦人的 ¡和 实体类,但这应该是可行的。