我使用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