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

ruby – 使用Nokogiri创建XML节点

发布时间:2020-12-17 03:56:20 所属栏目:百科 来源:网络整理
导读:我在创建节点并将其添加到 XML文件时遇到问题: mainnode secnode data1/data2 data2/data2 /secnode/mainnode 我希望能够像这样添加到文件中: mainnode secnode data1/data2 data2/data2 /secnode secnode data1/data2 data2/data2 /secnode/mainnode 我无
我在创建节点并将其添加到 XML文件时遇到问题:

<mainnode>
    <secnode>
         <data1></data2>
         <data2></data2>
    </secnode>
</mainnode>

我希望能够像这样添加到文件中:

<mainnode>
    <secnode>
         <data1></data2>
         <data2></data2>
    </secnode>
    <secnode>
         <data1></data2>
         <data2></data2>
    </secnode>
</mainnode>

我无法获得使用Nokogiri添加节点的概念.

这是我目前的代码:

def openXML
    f = File.open("file.xml")
    doc = Nokogiri::XML(f)
end

def parseXML
    mainnode.name = 'mainnode'
    f = openXML
    temp = Nokogiri::XML::Node.new "secnode",f
    mainnode.add_next_sibling(temp)

end

我错过了哪些概念?

我需要能够将实例变量添加到< data1>和< data2>但我发现Nokogiri教程在这个领域没有多大帮助,并且没有通过添加< secnode>节点作为< mainnode>的子节点.

任何帮助表示赞赏.

解决方法

在Nokogiri中添加节点要比你想象的容易得多,但你的问题不是很清楚.

如果要复制现有节点:

require 'nokogiri'

xml = <<EOT
<mainnode>
    <secnode>
         <data1></data2>
         <data2></data2>
    </secnode>
</mainnode>
EOT

doc = Nokogiri::XML(xml)

secnode = doc.at('secnode')
doc.root.add_child secnode.dup
puts doc.to_xml

运行时会导致:

<?xml version="1.0"?>
<mainnode>
    <secnode>
         <data1/>
         <data2/>
    </secnode>
<secnode>
         <data1/>
         <data2/>
    </secnode></mainnode>

时髦的对齐是附加用于缩进的插入文本节点的结果.生成的XML有效.

如果您要添加一组不同的节点,它仍然很容易:

要求’nokogiri’

xml = <<EOT
<mainnode>
    <secnode>
         <data1></data2>
         <data2></data2>
    </secnode>
</mainnode>
EOT

node_to_add = <<EOT
<secnode>
  <data3 />
  <data4 />
</secnode>
EOT

doc = Nokogiri::XML(xml)

doc.root.add_child node_to_add
puts doc.to_xml

哪个输出:

<?xml version="1.0"?>
<mainnode>
    <secnode>
         <data1/>
         <data2/>
    </secnode>
<secnode>
  <data3/>
  <data4/>
</secnode>
</mainnode>

您可以将其用作模板:

require 'nokogiri'

xml = <<EOT
<mainnode>
    <secnode>
         <data1></data2>
         <data2></data2>
    </secnode>
</mainnode>
EOT

v1 = 'foo'
v2 = 'bar'
node_to_add = <<EOT
<secnode>
  <data3>#{ v1 }</data3>
  <data4>#{ v2 }</data4>
</secnode>
EOT

doc = Nokogiri::XML(xml)

doc.root.add_child node_to_add
puts doc.to_xml

看起来像:

<?xml version="1.0"?>
<mainnode>
    <secnode>
         <data1/>
         <data2/>
    </secnode>
<secnode>
  <data3>foo</data3>
  <data4>bar</data4>
</secnode>
</mainnode>

Nokogiri通过使用XML或HTML的字符串表示来创建要添加的节点非常容易,然后它可以即时转换.

(编辑:李大同)

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

    推荐文章
      热点阅读