0

イベントログをxmlファイルに出力するデバイスがあります。そのデータをmysqlデータベースに入力したいと思います。LOAD XMLを使用したかったのですが、フォーラムをどのように検索しようとしたのかわかりませんが、回答を細かくすることができませんでした。XMLファイルは次のようになります。

<response>
<ROW0>:0000,dp0,54321,1,g1,00/00/00-00.00;:0001,dp0,54321,1,g1,00/00/00-00.00;:0002,dp0,54321,1,g1,00/00/00-00.00;:0003,dp0,54321,1,g1,00/00/00-00.00;:0004,dp0,54321,1,g1,00/00/00-00.00;:0005,dp0,54321,1,g1,00/00/00-00.00;:0006,dp0,54321,1,g1,00/00/00-00.00;:0007,dp0,54321,1,g1,00/00/00-00.00;:0008,dp0,54321,1,g1,00/00/00-00.00;:0009,dp0,54321,1,g1,00/00/00-00.00;:0010,dp0,54321,1,g1,00/00/00-00.00;:0011,dp0,54321,1,g1,00/00/00-00.00;:0012,dp0,54321,1,g1,00/00/00-00.00;:0013,dp0,54321,1,g1,00/00/00-00.00;:0014,dp0,54321,1,g1,00/00/00-00.00;:0015,dp0,54321,1,g1,00/00/00-00.00;:0016,dp0,54321,1,g1,00/00/00-00.00;:0017,dp0,54321,1,g1,00/00/00-00.00;:0018,dp0,54321,1,g1,00/00/00-00.00;:0019,dp0,54321,1,g1,00/00/00-00.00;:0020,dp0,54321,1,g1,00/00/00-00.00;:0021,dp0,54321,1,g1,00/00/00-00.00;:0022,dp0,54321,1,g1,00/00/00-00.00;:0023,dp0,54321,1,g1,00/00/00-00.00;:0024,dp0,54321,1,g1,00/00/00-00.00;:0025,dp0,54321,1,g1,00/00/00-00.00;:0026,dp0,54321,1,g1,00/00/00-00.00;:0027,dp0,54321,1,g1,00/00/00-00.00;:0028,dp0,54321,1,g1,00/00/00-00.00;:0029,dp0,54321,1,g1,00/00/00-00.00;:0030,dp2,00106,3,g2,18/06/12-20.02;:0031,dp2,00106,3,g2,18/06/12-20.02;:0032,dp2,00106,3,g2,18/06/12-20.03;:0033,dp2,00106,3,g2,18/06/12-20.04;:0034,dp2,00106,3,g2,18/06/12-23.10;:0035,dp2,00106,3,g2,18/06/12-23.10;:0036,dp2,00106,3,g2,18/06/12-23.10;:0037,dp2,00106,3,g2,18/06/12-23.11;:0038,dp2,00106,3,g2,18/06/12-23.11;:0039,dp2,00106,3,g2,18/06/12-23.15;:0040,dp2,00106,3,g2,18/06/12-23.15;:0041,dp2,00106,3,g2,18/06/12-23.16;:0042,dp2,00106,3,g2,18/06/12-23.16;:0043,dp2,00106,3,g2,18/06/12-23.20;:0044,dp2,00106,3,g2,18/06/12-23.21;:0045,dp2,00106,3,g2,18/06/12-23.21;:0046,dp2,00106,3,g2,18/06/12-23.21;:0047,dp2,00106,3,g2,18/06/12-23.22;:0048,dp2,00106,3,g2,18/06/12-23.22;:0049,dp2,00106,3,g2,18/06/12-23.22;:0050,dp2,00106,3,g2,18/06/12-23.23;:0051,dp2,00106,3,g2,18/06/12-23.23;:0052,dp2,00106,3,g2,18/06/12-23.23;:0053,dp2,00106,3,g2,18/06/12-23.23;:0054,dp2,00106,3,g2,18/06/12-23.24;:0055,dp2,00106,3,g2,18/06/12-23.24;:0056,dp2,00106,3,g2,18/06/12-23.24;:0057,dp2,00106,3,g2,18/06/12-23.24;:0058,dp2,00106,3,g2,18/06/12-23.27;:0059,dp3,00110,3,g2,18/06/12-23.31;:0060,dp3,00110,3,g2,18/06/12-23.31;:0061,dp2,00106,3,g2,18/06/12-23.31;:0062,dp2,00106,3,g2,18/06/12-23.32;:0063,dp2,00106,3,g2,18/06/12-23.34;:0064,dp2,00106,3,g2,18/06/12-23.34;:0065,dp2,00106,3,g2,18/06/12-23.34;:0066,dp2,00106,3,g2,18/06/12-23.34;:0067,dp2,00106,3,g2,18/06/12-23.35;:0068,dp2,00106,3,g2,18/06/12-23.35;:0069,dp2,00106,3,g2,18/06/12-23.36;:0070,dp2,00106,3,g2,18/06/12-23.36;:0071,dp2,00106,3,g2,18/06/12-23.37;:0072,dp2,00106,3,g2,18/06/12-23.38;:0073,dp3,00110,3,g2,18/06/12-23.38;:0074,dp2,00106,3,g2,18/06/12-23.38;:0075,dp2,00106,3,g2,18/06/12-23.39;:0076,dp2,00106,3,g2,18/06/12-23.39;:0077,dp2,00106,3,g2,18/06/12-23.41;:0078,dp3,00110,3,g2,19/06/12-13.52;:0079,dp3,00110,3,g2,19/06/12-13.52;:0080,dp3,00110,3,g2,19/06/12-13.52;:0081,dp3,00110,3,g2,19/06/12-13.52;:0082,dp2,00106,3,g2,19/06/12-15.32;:0083,dp2,00106,3,g2,19/06/12-15.32;:0084,dp3,00110,3,g2,19/06/12-15.32;:0085,dp3,00110,3,g2,19/06/12-15.32;:0086,dp3,00110,3,g2,19/06/12-15.32;:0087,dp3,00110,3,g2,19/06/12-15.33;:0088,dp3,00110,3,g2,19/06/12-15.51;:0089,dp3,00110,3,g2,19/06/12-15.51;:0090,dp3,00110,3,g2,19/06/12-15.52;:0091,dp3,00110,3,g2,19/06/12-15.52;:0092,dp3,00110,3,g2,19/06/12-15.52;:0093,dp3,00110,3,g2,19/06/12-15.53;:0094,dp3,00110,3,g2,19/06/12-15.53;:0095,dp3,00110,3,g2,19/06/12-15.53;:0096,dp3,00110,3,g2,19/06/12-15.53;:0097,dp3,00110,3,g2,19/06/12-15.54;:0098,dp3,00110,3,g2,19/06/12-15.54;:0099,dp3,00110,3,g2,19/06/12-15.54;</ROW0>
</response>

ご覧のとおり、各セルはコンマで区切られ、各行は;で区切られています。セルは次のとおりです。イベント番号、ユーザー名、コード、ドア、グループ、日付と時刻また、誰かがドアを開くたびにxmlファイルが更新されます。ただし、100行のログしか保持できません。私が達成しようとしているのは、このデータベースがXMLファイルから1時間ごとにデータを更新することですが、それが理にかなっている場合は、新しいデータのみを更新します。

誰かがそれを手伝ってくれませんか?

4

3 に答える 3

1

申し訳ありませんが、このデザインについて私には意味がありません。

XML は、データと記述を合わせたものです。あなたのXMLは何の説明も提供していません。 <ROW0>何も言わない。

さらに悪いことに、タグやメタデータのないカンマ区切りのテキストの子があります。

なぜこのようなことをしないのですか?

<response>
    <entries>
        <entry>
            <name>0000</name>
            <door>dp0</door>
            <group>54321</group>
            <date>2012-11-30</date>
            <time>11:12:13</time>
        </entry>      
    </entries>
</response> 

XPath を使用して何かを見つけることはできません。コンマで区切られたテキストを操作するには、そのテキストを解析する必要があります。

これは本当に.csv変装したファイルです。

「データベースは XML ファイルを更新する必要があります」と言いました。それも頭がおかしいと思います。データベースは永続性に関するものです。彼らは何も更新していないはずです。

また、xml ファイルは誰かがドアを開けるたびに更新されますが、100 行のログしか保持されません。私が達成しようとしているのは、このデータベースが XML ファイルからのデータを 1 時間ごとに更新することですが、それが理にかなっていれば、新しいデータのみです。

これは、1 時間ごとに起動して何かを実行するスケジュールされたジョブが必要なように思えます。どちらがソースで、どちらが最終的な保存場所 (ログ ファイルまたはデータベース) であるかを判断するのに苦労しています。

データベースがソースの場合は、データベースにクエリを実行し、.csv/log ファイルを更新します。最も簡単な方法は、上書きして、何が新しくて何がそうでないかを考えようとしないことだと思います。

ログ ファイルがソースの場合は、それを読み取って解析し、いくつかのキーを使用してすべてのレコードをループする必要があります。キーが表示されない場合は、INSERT します。その場合は、UPDATE してください。

于 2012-08-08T09:38:40.183 に答える
0

simplexml_load_file('filename.xml') 関数を使用して、その xml データを 1 つの配列に取り、foreach ループを使用して取得し、mysql にデータベース接続を作成し、クエリを使用してデータベースに挿入できます。

于 2013-04-17T07:13:41.117 に答える
0

次の手順に従ってください:-->

ステップバイステップ:

XML ファイルを解析し、そこから値を取得します (配列に保存します)。

MySQL データベースに接続する

挿入用の PreparedStatement を作成する

配列をループしてデータベースに値を挿入する

データベース接続を閉じる

于 2012-08-08T09:37:53.600 に答える