gpt4 book ai didi

ruby - 使用 Nokogiri 创建 XML 节点

转载 作者:数据小太阳 更新时间:2023-10-29 02:01:05 25 4
gpt4 key购买 nike

我在创建节点并将它们添加到 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 的字符串表示形式创建要添加的节点非常容易,然后它会即时转换这些节点。

关于ruby - 使用 Nokogiri 创建 XML 节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26601221/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com