2012-11-23 46 views
4

嘗試使用Nokogiri構建XML文檔時遇到了一個小問題。使用Nokogiri和Ruby命名元素「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 
     } 
    } 
    } 

回答

10

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" 
+0

這正是它。非常感謝。 – Jeff

+0

你救了我的一天......謝謝 – mArtinko5MB