2012-08-08 125 views
0

我有一個設備,輸出事件日誌到一個XML文件我想輸入數據到MySQL數據庫。 我想使用LOAD XML,但我不知道如何 我試圖搜索論壇,但我無法罰款。 XML文件看起來像這樣:從XML文件插入數據到MySQL數據庫

<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文件中的數據,但只有新數據纔有意義。

有人可以幫我嗎?

+0

是如何你連接到MySQL? (例如PHP,Java,Shell等) – 2012-08-08 09:34:34

+0

在這種情況下,你不能使用'LOAD XML' - 它只支持3種格式,不幸的是你的其中一個 - http://dev.mysql.com/doc/refman/ 5.5/en/load-xml.html – ManseUK 2012-08-08 09:36:07

回答

0

按照此步驟: - >

分步:

您解析XML的文件,並從中獲得價值

連接(將它們保存在一個數組)到你的MySQL數據庫

用於插入

遍歷您的陣列創建一個PreparedStatement並在數據庫中

插入值

關閉數據庫連接

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文件更新數據,但只有 新的數據,如果有道理的話。

這聽起來像你想要一個計劃的工作,每小時會醒來,做一些事情。我無法分辨哪些是源代碼,哪些是最終的安放地點 - 日誌文件或數據庫。

如果數據庫是源代碼,您將查詢數據庫並更新.csv/log文件。我認爲最簡單的做法是覆蓋它,而不是想知道什麼是新的,什麼不是。

如果日誌文件是源文件,您必須閱讀它,解析它,然後使用某個鍵循環遍歷所有記錄。如果該鍵沒有出現,則插入它。如果是,請更新它。

+0

你說得對,XML文件沒有任何意義。我很樂意按照你描述的方式擁有它。問題是這是如何設備輸出偶數日誌到一個XML文件,我不能改變任何東西與此設備:( – 2012-08-08 09:43:52

0

您可以使用使用simplexml_load_file(「filename.xml中」)功能,並採取XML數據到一個數組,並用foreach循環檢索它,使數據庫連接到MySQL和使用查詢,你可以把它插入到數據庫