【问题标题】:Ruby XML Reading from one XML and parsing into anotherRuby XML 从一个 XML 读取并解析为另一个
【发布时间】:2014-05-25 07:01:56
【问题描述】:
XPath.each( xmldoc, "//speech/speaking") do |element| 
# puts element.attributes['name']
# puts element.text
File.open(file_name + "_" + element.attributes['name'] + "-" + year + ".xml", 'a+') do |f|
    f.write("<speaker>" + element.attributes['name'] + "</speaker>")
    f.write("<speech>" + doc.xpath('//speech/speaking').text + "</speech>" + "\n")
end
end

你好 stackoverflow 我正在寻求帮助解决我在使用 XML 文件时遇到的逻辑问题。上面的代码创建了一个名为“speakers”的文件,然后它将说话者所说的内容放入该文件中。

我遇到的问题是将所有扬声器放入同一个文件中。所以我认为问题出在此处:

f.write("<speech>" + doc.xpath('//speech/speaking').text + "</speech>" + "\n")

我希望有人有更好的方法来做到这一点,但想法是将上面的代码更改为:

doc.xpath('//speech/speaking').text WHERE speaker == element.attributes['name']

最终,我希望每个演讲者在他们自己的 XML 文件中都有自己的演讲。

<speaking name="Mr. FAZIO">I appreciate my friend yielding.</speaking>

以上是 XML 文件中的示例。

【问题讨论】:

  • element.text 还不够吗?
  • 很遗憾不是,问题是源 XML 文件有数百个演讲者和数百个演讲。当前代码正在正确创建文件,但将每个人的演讲放入所有创建的 XML 文件中。

标签: ruby xml nokogiri builder rexml


【解决方案1】:

您要查找的 xpath 是:

doc.xpath("//speech/speaking[@name='#{element.attributes['name']}']").text

XPath to select Element by attribute value

【讨论】:

  • 这看起来不错,我之前尝试过,但它给了我一个错误:node.rb:159:in `evaluate': Invalid expression: //speech/speaking[@name=Mr.托马斯] (Nokogiri::XML::XPath::SyntaxError)
  • 确保有引号 (/speech/speaking[@name='Mr. THOMAS'])
  • 以上评论产生:speaking[@name=] (Nokogiri::XML::XPath::SyntaxError)
  • 我所建议的只是确保用单引号 '... 将值括起来
  • 已附上。我觉得这是在正确的轨道上,但我一直在这条路上,无法让它发挥作用。如果您有任何进一步的想法,我在上面发布了一些示例 XML。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-15
  • 2011-08-02
  • 2013-03-21
  • 2015-05-14
  • 2012-03-11
相关资源
最近更新 更多