2012-08-08 88 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和使用查询,你可以把它插入到数据库