我使用Nokogiri來創建XML。我想有以下結構:使用Nokogiri創建名稱空間的XML元素
<content:encode>text</content>
我曾嘗試這樣的代碼:
xml.content['encoded'] {xml.text "text"}
,但它給了我一個錯誤。
如何正確寫入?一個類似的例子是Referencing declared namespaces。
我使用Nokogiri來創建XML。我想有以下結構:使用Nokogiri創建名稱空間的XML元素
<content:encode>text</content>
我曾嘗試這樣的代碼:
xml.content['encoded'] {xml.text "text"}
,但它給了我一個錯誤。
如何正確寫入?一個類似的例子是Referencing declared namespaces。
你的例子沒有意義;你說你想要「編碼」,然後你試圖編寫「編碼」。
您的示例沒有意義,因爲它不是有效的XML。您有一個encode
標籤,其名稱空間爲content
,然後嘗試用content
標記關閉它。您需要<content:encode>text</content:encode>
或者您需要<encode:content>text</encode:content>
。 (你想要什麼?)
你沒有按照你給的鏈接中的例子。如果你想與命名空間encoded
一個content
元素,那麼每個例子中,你應該寫:
xml['encoded'].content{ xml.text "text" }
然而,也按照例子,你必須聲明你想引用任何命名空間。所以這樣做:
require 'nokogiri'
builder = Nokogiri::XML::Builder.new do |xml|
xml.root('xmlns:encoded' => 'bar') do
xml['encoded'].content{ xml.text "text" }
end
end
puts builder.to_xml
#=> <?xml version="1.0"?>
#=> <root xmlns:encoded="bar">
#=> <encoded:content>text</encoded:content>
#=> </root>
編輯:如果你真的只需要一個單一的元素,沒有根,通過引入nokogiri是矯枉過正。只要做到:
str = "Hello World"
xml = "<encoded:content>#{str}</encoded:content>"
puts xml
#=> <encoded:content>Hello World</encoded:content>
如果你確實需要使用引入nokogiri,但只希望在第一子根元素,這樣做:
xml_str = builder.doc.root.children.first.to_s
#=> "<encoded:content>text</encoded:content>"
謝謝。但我們需要得到這樣的結構。
幹得好告訴我們你嘗試過什麼樣的代碼。將來,您應該始終提供您收到的確切錯誤消息,而不僅僅是出現錯誤。 – Phrogz 2011-02-16 13:59:05