You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:将PHP XML/XSL转换代码转为Ruby on Rails的ERB代码

将PHP的XML+XSL转换代码转为Rails ERB实现

嘿,作为Rails新手,把这段PHP代码转成ERB其实挺简单的,咱们用Rails默认自带的Nokogiri库就能搞定——它处理XML和XSLT比PHP的DOM库还要顺手呢!

先回顾下你的PHP代码核心逻辑:加载XML文件、加载XSL样式表、执行转换并输出结果。对应到Rails里,我们可以按照MVC规范把逻辑放在控制器,再在ERB视图里渲染结果。

步骤1:控制器中处理转换逻辑

在你的控制器(比如QuotesController)里添加对应的action:

# app/controllers/quotes_controller.rb
class QuotesController < ApplicationController
  def show_quotes
    # 加载XML文件,这里假设文件放在public目录下,可根据实际位置调整路径
    xml_path = Rails.root.join('public', 'famousQoutes.xml')
    xml_doc = Nokogiri::XML(File.read(xml_path))

    # 加载XSL样式表
    xsl_path = Rails.root.join('public', 'famousQ.xsl')
    xsl_doc = Nokogiri::XSLT(File.read(xsl_path))

    # 执行XSLT转换
    @transformed_content = xsl_doc.transform(xml_doc)
  end
end

步骤2:在ERB视图里渲染结果

创建对应的视图文件app/views/quotes/show_quotes.html.erb,写入以下代码:

<%# 直接输出转换后的HTML,html_safe告诉Rails不要转义HTML内容 %>
<%= @transformed_content.to_html.html_safe %>

快速测试:直接在ERB中写全逻辑(不推荐长期使用,不符合MVC)

如果只是临时测试,也可以把所有逻辑直接写在ERB里:

<%
# 加载XML和XSL文件
xml_doc = Nokogiri::XML(File.read(Rails.root.join('public', 'famousQoutes.xml')))
xsl_doc = Nokogiri::XSLT(File.read(Rails.root.join('public', 'famousQ.xsl')))
# 执行转换
transformed_content = xsl_doc.transform(xml_doc)
%>

<%= transformed_content.to_html.html_safe %>

几个关键注意点

  • 文件路径:用Rails.root.join构建绝对路径,能避免相对路径在不同环境下出错。如果你的XML/XSL文件放在app/assets等其他目录,记得调整路径参数。
  • html_safe:一定要加这个!不然Rails会把转换后的HTML转义成实体字符,你看到的会是一堆<、>而不是渲染好的页面。
  • Nokogiri依赖:Rails默认已经包含Nokogiri,不用额外安装gem;如果是单独的Ruby脚本,才需要运行gem install nokogiri。

内容的提问来源于stack exchange,提问作者user9683128

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:36:48