2014-05-25 126 views
0
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文件有關的邏輯問題的幫助。上面的代碼創建一個帶有「揚聲器」名稱的文件,然後它應該將發言者說的內容放入該文件中。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

回答

0

你正在尋找的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