我有一个XML文件(第一个条目的片段加上下面的标题),我想把它放到一个新创建的数据库中。看起来XML至少有2个不同的表。
我希望它也忽略一些我不需要的特定行。
另外,我应该先创建表和列吗?或者,界面可以为我创建它们吗?
<?xml version="1.0" encoding="UTF-8" ?>
<npidata xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.npi.gov.au/includes/download/npi-data-download.xsd">
<report>
<year>2014</year>
<registered_business_name>W H HECK & SONS PTY LTD</registered_business_name> - IGNORE
<abn>91009661401</abn> - IGNORE
<acn>009661401</acn> - IGNORE
<sub_threshold>N</sub_threshold>
<data_start_date>2013-07-01</data_start_date>
<data_end_date>2014-06-30</data_end_date>
<first_published_date>2015-03-31</first_published_date>
<last_updated_date>2015-03-31</last_updated_date>
<number_of_employees>55</number_of_employees> - IGNORE
<facility_name>Rocky Point Sugarmill</facility_name>
<jurisdiction_facility_id>Q014HEK001</jurisdiction_facility_id> - PRIMARY KEY
<jurisdiction>QLD</jurisdiction> - IGNORE
<site_address_street>MILL RD</site_address_street> - IGNORE
<site_address_suburb>Woongoolba</site_address_suburb>
<site_address_state>QLD</site_address_state>
<site_address_postcode>4207</site_address_postcode>
<main_activities>Sugarmilling</main_activities>
<site_latitude>-27.735666</site_latitude>
<site_longitude>153.327611</site_longitude>
<anzsic_codes> - IGNORE
<anzsic_code> - IGNORE
<type>Primary</type><code>1181</code> - IGNORE
<name>Sugar Manufacturing</name> - IGNORE
</anzsic_code> - IGNORE
</anzsic_codes> - IGNORE
<public_contact> - IGNORE
<title>Mr</title>
<name>David</name> - IGNORE
<surname>Heck</surname> - IGNORE
<position>Managing Director</position> - IGNORE
<phone>(07) 5547 4500</phone> - IGNORE
<fax>(07) 5546 1233</fax> - IGNORE
<email>david@heckgroup.com.au</email> - IGNORE
</public_contact> - IGNORE
<emissions>
<emission>
<substance>Ethanol</substance>
<destination>Water</destination>
<quantity_in_kg>19518</quantity_in_kg>
<mass_balance_estimation>N</mass_balance_estimation>
<engineering_calculations_estimation>Y</engineering_calculations_estimation>
<direct_measurement_estimation>N</direct_measurement_estimation>
<emission_factors_estimation>N</emission_factors_estimation>
<approved_alternative_estimation>N</approved_alternative_estimation>
</emission>
<emission>
<substance>Ethanol</substance>
<destination>Air Fugitive</destination>
<quantity_in_kg>2114.45</quantity_in_kg>
<mass_balance_estimation>N</mass_balance_estimation>
<engineering_calculations_estimation>Y</engineering_calculations_estimation>
<direct_measurement_estimation>N</direct_measurement_estimation>
<emission_factors_estimation>N</emission_factors_estimation>
<approved_alternative_estimation>N</approved_alternative_estimation>
</emission>
<emission>
<substance>Ethanol</substance>
<destination>Air Total</destination>
<quantity_in_kg>2114.45</quantity_in_kg>
</emission>
<emission>
<substance>Hydrochloric acid</substance>
<destination>Land</destination>
<quantity_in_kg>2282.95</quantity_in_kg>
<mass_balance_estimation>N</mass_balance_estimation>
<engineering_calculations_estimation>Y</engineering_calculations_estimation>
<direct_measurement_estimation>N</direct_measurement_estimation>
<emission_factors_estimation>N</emission_factors_estimation>
<approved_alternative_estimation>N</approved_alternative_estimation>
</emission>
<emission>
<substance>Particulate Matter 10.0 um</substance>
<destination>Air Fugitive</destination>
<quantity_in_kg>398.91285</quantity_in_kg>
<mass_balance_estimation>N</mass_balance_estimation>
<engineering_calculations_estimation>Y</engineering_calculations_estimation>
<direct_measurement_estimation>N</direct_measurement_estimation>
<emission_factors_estimation>N</emission_factors_estimation>
<approved_alternative_estimation>N</approved_alternative_estimation>
</emission>
<emission>
<substance>Particulate Matter 10.0 um</substance>
<destination>Air Total</destination>
<quantity_in_kg>398.91285</quantity_in_kg>
</emission>
</emissions>
<transfers></transfers> - IGNORE
<pollution_control_devices></pollution_control_devices> - IGNORE
<cleaner_production_activities></cleaner_production_activities> - IGNORE
</report>这个XML文件有超过11,000个条目,所以手动输入它们是不可能的。
发布于 2015-07-07 08:58:53
首先,您必须对文件进行一些操作。phpMyAdmin确实可以导入和导出数据,但是phpMyAdmin使用的格式与您的数据当前所用的格式不同。
XML数据的不幸之处在于,XML对任何类型的数据都是一个很好的包装器,但是对于系统之间的互操作性来说,它要求两个系统使用相同的方言,而这在实际情况中几乎是行不通的。
有没有可能通过其他方式获得数据--例如,导出为不同的格式?
下面是一个示例,说明phpMyAdmin如何对数据进行格式化;您可以通过导出现有的表来查看更多细节,因为我只从中间挑选了一小部分。
<database name="stackoverflowtest">
<table name="tblUsers">
<column name="id">1</column>
<column name="name">Bob</column>
</table>
<table name="15">
<column name="id">2</column>
<column name="name">Jim</column>
</table>
</database>如果您不能以另一种格式获取数据,我建议使用一些文本解析器来处理您已有的数据。我认为CSV对于您的导入来说可能是一种更好的格式,并且通过一些工作,您可以想出一个awk/sed/perl/python脚本来提供您需要的格式(或者可能是任何其他语言,但这些都是操作文本文件的常用语言)。您甚至可以找到一个XML解析库函数,它允许您将XML文件作为实际的XML属性读取,而不必自己解析它。这可能是理想的解决方案,但即使没有这样的解决方案,您也可以查找包含<year>和</year>的每一行,并从其间提取数据。添加逗号,然后对<data_start_date>重复操作,依此类推,直到到达<report>/</report>块的末尾并添加一个换行符。在整个XML文件上执行该循环,您将得到一个格式良好的CSV文件,phpMyAdmin将很乐意加载该文件。MySQL本身使用的XML风格略有不同(仍然与您现有的不同);它看起来更像
<row>
<field name="id">1</field>
<field name="name">Bob</field>
</row>
<row>
<field name="id">2</field>
<field name="name">Jim</field>
</row>我认为这将比使用XML更容易。不幸的是,解决方案需要一些工作,但希望我已经为您提供了一些开始的资源。使用我提到的工具操作文件的教程和示例不计其数,不过我还是建议先研究一下对XML友好的Python、Perl甚至PHP库。
https://stackoverflow.com/questions/31197287
复制相似问题