5

Nokogiri で XML ドキュメントを作成しようとすると、小さな問題が発生します。

要素の 1 つを「テキスト」と呼びたい (以下の貼り付けたコードの一番下を参照)。通常、新しい要素を作成するには、次のようなことを行いますxml.text-しかし.text、ノコギリが別のことをするためにすでに使用している方法のようです. したがって、この行を書くとき、xml.textノコギリは という新しい要素を作成しているのではなく<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 に答える