【问题标题】:XML file to a PHPMyAdmin DatabaseXML 文件到 PHPMyAdmin 数据库
【发布时间】:2015-07-03 01:51:18
【问题描述】:

我有一个 XML 文件(第一个条目的 sn-p 加上下面的标题),我想将它放入一个新创建的数据库中。看起来 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 &amp; 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 个条目,因此手动输入它们是不可能的。

【问题讨论】:

  • XML 是静态数据。它不会创建任何东西,但它已经创建了。您至少需要一些您的问题中完全缺少的软件或程序。问答网站不能仅用于发布要求,但您需要提出一个具体的问题——在 Stackoverflow 上甚至关于编程。那么您面临的具体编程问题是什么?还是您刚刚遇到了支持问题?

标签: xml phpmyadmin


【解决方案1】:

您必须先对文件进行一些操作。 phpMyAdmin 确实可以导入和导出 XML 数据,但是 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 属性读取,而不必自己进行解析。这可能是理想的解决方案,但即使没有,您也可以查找包含&lt;year&gt;&lt;/year&gt; 的每一行并从中提取数据。添加逗号,然后重复 &lt;data_start_date&gt; 等等,直到到达 &lt;report&gt;/&lt;/report&gt; 块的末尾并添加换行符。在整个 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 库。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-31
    • 2016-04-01
    • 2016-08-03
    • 1970-01-01
    • 2016-06-05
    • 2023-03-21
    • 1970-01-01
    • 2018-10-13
    相关资源
    最近更新 更多