Ruby XML从一个XML读取并解析为另一个

问题描述:

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 

您好,*我正在寻找解决我与XML文件有关的逻辑问题的帮助。上面的代码创建一个带有“扬声器”名称的文件,然后它应该将发言者说的内容放入该文件中。Ruby XML从一个XML读取并解析为另一个

我遇到的问题是它将所有扬声器放在同一个文件中。所以我想这个问题就出在这里:

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文件中的示例。

+1

不是'element.text'就够了吗? –

+0

不幸的是,问题是源XML文件有数百个发言者,有数百个演讲。当前的代码正确地创建了文件,但是将所有创建的XML文件中的每个人的演讲放在了一起。 – CodeHard

你正在寻找的XPath是:

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

看到XPath to select Element by attribute value

+0

这看起来是正确的,我之前尝试过,但它给了我一个错误:node.rb:159:在评估中:无效的表达式://演讲/演讲[@ name = Mr。 THOMAS](Nokogiri :: XML :: XPath :: SyntaxError) – CodeHard

+0

请确保你已经附上引号('/ speech/speaking [@ name ='THOMAS先生') –

+0

以上评论收益率:发言[@ name = ](Nokogiri :: XML :: XPath :: SyntaxError) – CodeHard