gpt4 book ai didi

ruby-on-rails - 如何在 Nokogiri 节点名称中使用冒号 (":")

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

我希望以下代码中的节点名称为“node:name”,但名称被放入字段的文本中。

require 'nokogiri'

file = File.new("/Users/user_a/code/xmler/test.xml", "w+")

builder = Nokogiri::XML::Builder.new do |xml|
xml.node:name do

end
end

file << builder.to_xml
file.close
puts builder.to_xml

如何在 Nokogiri 的节点名称中使用冒号或其他特殊字符?

最佳答案

在我看来,您有三个选择:

  1. 您正在使用命名空间

    然后你可以声明命名空间并使用xml[]方法:

    builder = Nokogiri::XML::Builder.new do |xml|
    xml.root('xmlns:node' => 'http://example.com') do
    xml['node'].name
    end
    end

    输出:

    <root xmlns:node="http://example.com">
    <node:name/>
    </root>

    不过,如果您想将命名空间添加到根元素上,则此方法有点棘手。参见“How to create an XML document with a namespaced root element with Nokogiri Builder”。

  2. 没有使用命名空间,但想要/需要一个带冒号的元素名称:

    在这种情况下,您需要将名为“node:name”的方法发送到xml block 参数。您可以使用普通的 ruby​​ send 方法执行此操作:

    builder = Nokogiri::XML::Builder.new do |xml|
    xml.root do
    xml.send 'node:name'
    end
    end

    这个输出:

    <?xml version="1.0"?>
    <root>
    <node:name/>
    </root>
  3. 您不确定这个“命名空间”业务是关于什么的:

    在这种情况下,您最好避免在元素名称中使用冒号。

    另一种方法是使用 - 代替。如果这样做,则需要使用上面的方法 2,但要使用 xml.send 'node-name'。我包含此选项是因为您没有在您的问题中提及 namespace ,并且其中使用了冒号(如方法 1. 所示),因此不使用冒号会更安全,以避免将来出现任何问题。

关于ruby-on-rails - 如何在 Nokogiri 节点名称中使用冒号 (":"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9351535/

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