【问题标题】:Nokogiri XML file output is located where?Nokogiri XML 文件输出位于哪里?
【发布时间】:2013-07-08 00:12:06
【问题描述】:

我需要使用 Ruby 和/或 Rails 生成一个 XML 文件并安装 Nokogiri。

  1. 将生成 XML 文件的 Ruby 代码放在哪个文件中?
  2. 如何告诉 Nokogiri 生成 XML 并将其放入文件中?
  3. XML 输出位于何处?

这是我的控制器文件中的代码:

class MonkeyTalkController < ApplicationController

require 'rubygems'
require 'nokogiri'

  def edit

  end

  def update
#debugger
    render :text => MonkeyTalk.new(params).build_xml

    builder = Nokogiri::XML::Builder.new(:encoding => 'utf-8') do |xml|
      xml.root {
  xml.products{
         xml.widget {
          xml.id_ "10"
          xml.name "Awesome widget"
          }
        }
      }

      doc = Nokogiri::XML.parse(params)
      File.open('xml.out', 'w') do |fo|
      fo.print doc.to_s
      end
    end
    puts builder.to_xml

  end

end

我需要对 Ruby 和 Rails 应用程序的结构以及 Nokogiri 的工作原理有基本的了解。

【问题讨论】:

  • 您需要向我们展示您编写的代码。就目前而言,您似乎对您的代码和 Nokogiri 如何工作和交互存在重大误解,如果没有看到您编写的内容并告诉我们出了什么问题,我们无法真正解决它们。
  • 谢谢。请原谅我忘记添加我的代码。
  • 请理解我不知道我不知道什么!我一直在这个论坛上试图了解 ruby​​/rails 和 nokogiri 是如何工作的。我只需要对 ruby​​/rails 和 nokogiri gem 的结构有一个基本的了解。
  • 如果您对 Ruby 应用程序编程没有更多的基本概念,我强烈建议您暂时搁置 Rails,只关注 Ruby。学习它并同时使用 Nokogiri 和 Rails 最终会有意义。
  • 我正在投票重新打开它。通过添加的源代码,它显示了足够的信息来建议合理的答案。

标签: ruby-on-rails ruby xml nokogiri


【解决方案1】:

要生成 xml 文件,您不需要 Rails。 Ruby(和 Nokogiri 或其他构建器)就足够了。

首先,您必须构建您的 xml:

builder = Nokogiri::XML::Builder.new(:encoding => 'utf-8') do |xml|
  xml.root do
    xml.products do
      xml.widget do
        xml.id_ "10"
        xml.name "Awesome widget"
      end
    end
  end
end

你可以使用builder.to_xml从这个构建器获取一个xml字符串:

xml_string = builder.to_xml # => "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <products>\n    <widget>\n      <id>10</id>\n      <name>Awesome widget</name>\n    </widget>\n  </products>\n</root>\n"

要将此字符串保存到文件中,请使用File.openFile#write

# open a file instance with path '/path/to/file.xml' in write mode (-> 'w')
File.open('/path/to/file.xml', 'w') do |file|
  # write the xml string generated above to the file
  file.write xml_string
end

重要提示:如果不再需要打开的所有文件,您始终必须确保关闭它们。 File.open 带有一个块(在我上面的片段中使用)将在块中的代码执行后自动为您关闭文件...

【讨论】:

    【解决方案2】:

    您的文件已写入xml.out。这个文件在哪里?这取决于您启动应用程序时的工作目录,以及您的代码或任何库是否曾调用 Dir.chdir 来更改工作目录。

    您可以输出Dir.pwdFile.expand_path('xml.out') 以查看此文件的写入位置。

    【讨论】:

      猜你喜欢
      • 2022-01-03
      • 1970-01-01
      • 2014-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-08
      • 2021-01-01
      • 1970-01-01
      相关资源
      最近更新 更多