1

こんにちは !

私はすべてのウェブで調査しましたが、それについて何も見つかりませんでした。それは奇妙です、多分それは個人的な問題です. 私のような悩みは誰にでもあるからです。

だから、私はその仕事をするためにmysqlで簡単なコマンドを作りました

LOAD XML LOCAL INFILE 
    'person.xml'
INTO TABLE 
    person
ROWS IDENTIFIED BY 
    '<person>'

ファイル person.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<list>
  <person>
      <field name="person_id">5</field>
      <field name="fname"><![CDATA[Ronström]]></field>
      <field name="lname">Ulin</field>
  </person>
  <person>
      <field name="person_id">6</field>
      <field name="fname"><![CDATA[Mikael]]></field>
      <field name="lname">Sköld</field>
  </person>
</list>

INSERT は問題なく実行されます。要点は、タグ CDATA 内に値を挿入しないことです。NULL を返します。そのタグを取り除いて、値だけを返す方法はありますか?!

4

2 に答える 2

2

どちらを使用してもこれを機能させることができませんでしLOAD XML INFILEた-CDATAの内容を食べているようです。

ただし、通常の古いLOAD DATA INFILEものを使用して動作させました。サンプルの XML ファイルと次の表を指定します。

CREATE TABLE `people` (
  `person_id` int(11) NOT NULL PRIMARY KEY,
  `fname` text,
  `lname` text
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

これを実行すると、ファイルからテーブルにデータがインポートされます。

LOAD DATA INFILE 
    '/tmp/person.xml'
INTO TABLE 
    people
CHARACTER SET 'utf8'
LINES STARTING BY '<person>' TERMINATED BY '</person>'
(@person)
SET
  person_id = ExtractValue(@person, '//field[@name="person_id"]'),
  fname     = ExtractValue(@person, '//field[@name="fname"]'),
  lname     = ExtractValue(@person, '//field[@name="lname"]')
;

これは、LOAD DATA INFILE に、それぞれ<person>...</person>が論理的な「行」であり、ローカル変数に格納されることを伝えることによって機能します@person。次に、これをXML フラグメントとしてExtractValue()関数に渡し、適切な XPath 式を使用して必要な値を選択し、結果を適切な列に格納します。

于 2013-10-10T01:15:15.550 に答える