0

大きなxmlファイルのアイテムのいくつかをmysqlテーブルにインポートしたいと思います。xml に次のような何千ものアイテムが含まれているとします。

<CD>
<TITLE>Empire Burlesque</TITLE>
<ARTIST>Bob Dylan</ARTIST>
<COUNTRY>USA</COUNTRY>
<COMPANY>Columbia</COMPANY>
<PRICE>10.90</PRICE>
<YEAR>1985</YEAR>
</CD>

しかし、mysql の cd テーブルにインポートするには、各 CD の「TITLE」と「YEAR」だけが必要です。

xml から mysql にデータを取得するための 'LOAD XML' mysql 5.+ があることは知っていますが、どうやらそれは xml 全体をマップしているようで、これは私が必要としているものではありません。ですから、あなたの助けに感謝します。

4

3 に答える 3

3

SimpleXMLを使用して XML をロードし、値をループします。私の例ではsimplexml_load_string()、同じように簡単に使用できますsimple_load_file()

$string = <<<XML
<?xml version='1.0'?> 
<CDS>
<CD>
<TITLE>Empire Burlesque</TITLE>
<ARTIST>Bob Dylan</ARTIST>
<COUNTRY>USA</COUNTRY>
<COMPANY>Columbia</COMPANY>
<PRICE>10.90</PRICE>
<YEAR>1985</YEAR>
</CD>
<CD>
<TITLE>Empire Burlesque2</TITLE>
<ARTIST>Bob Dylan</ARTIST>
<COUNTRY>USA</COUNTRY>
<COMPANY>Columbia</COMPANY>
<PRICE>10.90</PRICE>
<YEAR>1986</YEAR>
</CD>
</CDS>
XML;

$xml = simplexml_load_string($string);

foreach ($xml as $cd) 
{
    // Your mysql functions for inserting goes here
    echo $cd->TITLE . "<br>";
    echo $cd->YEAR . "<br>";
}

実際に見る

うまくいけば、それはあなたに正しい方向へのポイントを与える.

于 2013-02-22T18:57:56.237 に答える
2

したがって、このアプローチで仕事を成し遂げることができます。


  • XSLT変換を使用して、すべての要素を含む大きなXMLファイルを必要な要素のみを含む小さなXMLファイルに変換します
  • SAXON、DOMなどのXMLパーサーを使用するよりも、新しい小さなXMLファイルを解析します
  • 解析とデータベースダンプの部分を実行するプログラミング言語を使用してください。
    たとえば、Javaを使用する場合は、JAXBと呼ばれる概念を使用して、XMLをJavaオブジェクトにマーシャリング解除してから、データベースに入力できます。

元のXMLと、それらに必要な要素に関する詳細情報を共有できる場合は、JAVAでソリューションを投稿できます。

これがお役に立てば幸いです。

于 2013-02-22T19:08:37.173 に答える
2

ありがとうございます。必要なフィールドを xml から mysql テーブルにインポートする最も簡単な方法は、次のような mysql の組み込みの Load XML 機能を使用することです。

 LOAD XML LOCAL INFILE '/path/to/file.xml' INTO TABLE  cds ROWS IDENTIFIED BY '<CD>';

file.xml から必要な列によって、以前に cds テーブルを作成した場所。

mysql 5.5 以降では、mysql コマンド ラインを入力するときに「--local-infile」フラグを追加する必要があることに注意してください。追加しないと、エラー 1148 が発生します。

于 2013-02-26T02:18:15.810 に答える