1

我正在寻找一种在 ruby​​ 中解析 xml/html 文档的方法,该文档包含 ERB 样式标签,其中包含<% %>ruby​​ 代码。REXML,内置的 XML 解析器不允许我这样做。

我知道我可能可以使用第三方库hpricot,但我想避免任何外部依赖项。

有没有办法让 REXML 对标签不那么严格?或者让它识别这个标签?还有其他解决方案吗?

4

1 回答 1

4

好吧,如果您想要实际的 Ruby 代码本身,那么您的问题不在于解析器,而在于您的 XML 格式错误。

我仍然假设您的 XML 看起来像这样:

<parent>
    <node>
         <% some code here! %>
    </node>
</parent>

如果确实如此,那么node节点(heh)的内容实际上应该是一个CDATA部分。所以它应该是这样的:

<node><![CDATA[
     <% some code here! %>
]]></node>

如果您这样做,REXML 将能够正确解析 XML 文件,并返回 的内容node,其中将包含erb 标签。

如果您无法控制 XML 的生成,作为权宜之计,您可以(假设任何包含 ERB 的给定节点包含 ERB)对开始和结束代码进行文件范围的搜索和替换标签,并适当地附加/前置 CDATA 标记。您可以使用您选择的语言轻松地自动执行此操作,这里有很多关于 SO 的示例。

于 2009-07-03T05:39:40.883 回答