加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – 使用Nokogiri创建带有命名空间的XML元素

发布时间:2020-12-17 03:58:45 所属栏目:百科 来源:网络整理
导读:我使用Nokogiri来创建 XML.我想要有以下结构: content:encodetext/content 我试过这段代码: xml.content['encoded'] {xml.text "text"} 但它给了我一个错误. 我该怎么写得正确?类似的例子是在Referencing declared namespaces. 解决方法 你的榜样没有意义
我使用Nokogiri来创建 XML.我想要有以下结构:

<content:encode>text</content>

我试过这段代码:

xml.content['encoded'] {xml.text "text"}

但它给了我一个错误.

我该怎么写得正确?类似的例子是在Referencing declared namespaces.

解决方法

>你的榜样没有意义;你说你想要“编码”,然后你尝试写“编码”.
>您的示例没有意义,因为它不是有效的XML.您有一个带有命名空间内容的开始编码标记,然后您尝试使用内容标记关闭它.您想要< content:encode> text< / content:encode>或者你想< encode:content> text< / encode: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>

编辑:如果你真的只需要一个没有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>"

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读