5

在尝试使用 Nokogiri 构建 XML 文档时,我遇到了一个小问题。

我想将我的元素之一称为“文本”(请参阅​​下面粘贴代码的最底部)。通常,要创建一个新元素,我会执行以下操作xml.text——但这​​似乎.text是 Nokogiri 已经使用的一种方法来做其他事情。因此,当我写下这行代码时, xml.textNokogiri 并没有创建一个名为的新元素<text>,而只是编写了作为元素内容的文本。我怎样才能让 Nokogiri 真正制作一个名为 的元素<text>

builder = Nokogiri::XML::Builder.new do |xml|   
  xml.TEI("xmlns" => "http://www.tei-c.org/ns/1.0"){
    xml.teiHeader {
        xml.fileDesc{
            xml.titleStmt{
                xml.title "Version Log for #{title}"
                xml.author "Jeffrey C. Witt"
            }
            xml.editionStmt{
                xml.edition('n' => "#{ed_no}") {
                    xml.date('when' => "#{newDate}")
                    }
                }
            xml.publicationStmt{
                xml.publisher "#{publisher}"
                xml.pubPlace "#{pubPlace}"
                xml.availability("status" => "free") {
                    xml.p "Published under a Creative Commons Attribution ShareAlike 3.0 License"
                }
                xml.date("when" => "#{newDate}") 
            }   
            xml.sourceDesc {
                xml.p "born digital"
            }
        }
    }
    xml.text "test"{
      xml.body {
       xml.p "test document
       }
     }
  }
4

1 回答 1

11

文档

构建器通过利用 method_missing 来工作。不幸的是,在 ruby​​ 中定义了一些难以删除或危险的方法。例如,您可能希望创建名称为“type”、“class”和“id”的标签。在这种情况下,您可以使用下划线来消除您的标签名称与方法调用的歧义。

因此,您所要做的就是在 之后添加下划线text,如下所示:

builder = Nokogiri::XML::Builder.new { |xml| xml.text_ "test" }
builder.to_xml
#=> "<?xml version=\"1.0\"?>\n<text>test</text>\n"
于 2012-11-23T14:15:49.130 回答