尝试使用Nokogiri构建XML文档时遇到一个小问题。
我想调用我的一个元素“text”(请参阅下面粘贴代码的最底部)。通常,要创建一个新元素,我会执行类似下面的xml.text
- 但似乎.text
是Nokogiri已经用来做其他事情的方法。因此,当我写这一行xml.text
时,Nokogiri并没有创建一个名为<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
}
}
}
答案 0 :(得分:11)
来自docs:
构建器通过利用method_missing来工作。不幸的是,一些方法在红宝石中定义,难以去除或有危险。例如,您可能想要创建名称为“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"