[ruby-list:47299] Re: 改行やタグを含むデータをmysqlでinsertするには +追加 XMLの操作

From: Yosuke Suzuki <yosuke.suzuki@...>
Date: 2010-08-14 14:06:46 UTC
List: ruby-list #47299
> def insert_record(tablename, hash)
>  st = mysql.prepare("insert into #{tablename}(#{hash.keys*','})
> values(#{['?']*hash.size*','})")
>  st.execute(hash.values)
> end
簡潔に書けるのですね。
ありがとうございます。

ちなみに、今回やっている部分で、新につまずいたことが
あるので、またまたご教授いただけないでしょうか。

すごい簡略化してますが、
以下のような構造を持つXMLから、DBに書き込むということを
考えています。

<rdf>
<item>
        <title>hoge</title>
        <id>1</id>
        <hage:link>
                <hage:linkTitle>hagehage1</hage:linkTitle>
        </hage:link>
        <hage:link>
                <hage:linkTitle>hagehage2</hage:linkTitle>
        </hage:link>
        <hage:link>
                <hage:linkTitle>hagehage3</hage:linkTitle>
        </hage:link>

</item>
略 itemが繰り返し
</rdf>

このデータをいったん配列に取り込むために、
以下のような処理を書いています。

doc = REXML::Document.new(body).elements['rdf']

doc.elements.each('item') {|item|
   word = Hash.new()
   lresultset = []

   item.elements.each {|property|
     word["#{property.name}"] = property.text

     property.elements.each('link') {|link|
           lword = Hash.new()
           link.elements.each {|lproperty|
              lword["#{lproperty.name}"] = lproperty.text
         }
         lresultset << l_word
      }
   }
itemの子ノードはきちんとデータが拾えますが、
孫ノードに当たる部分(item->link->linkTitle)がうまく拾えません。

孫ノードだけを拾うというのは、できましたが、
今回のデータの拾い方としては、子ノードと孫ノードをセットにして
配列に入れる必要があります。

rexmlのドキュメントなど眺めてみましたが、
今ひとつ理解できませんでした。

-- 
--------------------------
Yosuke Suzuki
yosuke.suzuki@gmail.com

In This Thread

Prev Next