我正在寻找一种在 ruby 中解析 xml/html 文档的方法,该文档包含 ERB 样式标签,其中包含<% %>
ruby 代码。REXML,内置的 XML 解析器不允许我这样做。
我知道我可能可以使用第三方库hpricot
,但我想避免任何外部依赖项。
有没有办法让 REXML 对标签不那么严格?或者让它识别这个标签?还有其他解决方案吗?
好吧,如果您想要实际的 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 的示例。