我使用Nokogiri来创建XML.我想要有以下结构:
<content:encode>text</content>
Run Code Online (Sandbox Code Playgroud)
我试过这段代码:
xml.content['encoded'] {xml.text "text"}
Run Code Online (Sandbox Code Playgroud)
但它给了我一个错误.
我该怎么写得正确?类似的示例在引用声明的命名空间中.
Phr*_*ogz 11
你的榜样没有意义; 你说你想要"编码",然后你尝试写"编码".
您的示例没有意义,因为它不是有效的XML.您有一个encode带有命名空间的开始标记content,然后尝试用content标记关闭它.你想要<content:encode>text</content:encode>或者你想要的<encode:content>text</encode:content>.(你想要哪一个?)
您没有按照您提供的链接中的示例进行操作.如果你想要一个content带有命名空间的元素encoded,那么按照你应该写的例子:
xml['encoded'].content{ xml.text "text" }
Run Code Online (Sandbox Code Playgroud)但是,根据示例,您还必须声明要引用的任何名称空间.这样做:
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>
Run Code Online (Sandbox Code Playgroud)编辑:如果你真的只需要一个没有root的单个元素,使用Nokogiri就是矫枉过正.做就是了:
str = "Hello World"
xml = "<encoded:content>#{str}</encoded:content>"
puts xml
#=> <encoded:content>Hello World</encoded:content>
Run Code Online (Sandbox Code Playgroud)
如果你真的需要使用Nokogiri,但只想要第一个子根元素,那么:
xml_str = builder.doc.root.children.first.to_s
#=> "<encoded:content>text</encoded:content>"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3102 次 |
| 最近记录: |