0

我有这个 XML 文件,我正试图将其导入 mySQL。但是,使用 LOAD XML 查询不起作用,因为它们在变量名中是“-”。如何将其导入数据库并处理无效字符?:

    <?xml version="1.0" encoding="UTF-8"?>
<projects type="array">
  <project>
    <active type="boolean">true</active>
    <bill-by>none</bill-by>
    <billable type="boolean">true</billable>
    <budget type="decimal" nil="true"/>
    <budget-by>none</budget-by>
    <client-id type="integer">999</client-id>
    <code></code>
    <cost-budget type="decimal" nil="true"/>
    <cost-budget-include-expenses type="boolean">false</cost-budget-include-expenses>
    <created-at type="datetime">2013-06-27T18:10:26Z</created-at>
    <fees type="decimal" nil="true"/>
    <highrise-deal-id type="integer" nil="true"/>
    <hourly-rate type="decimal" nil="true"/>
    <id type="integer">38125</id>
    <name>Banking</name>
    <notify-when-over-budget type="boolean">false</notify-when-over-budget>
    <over-budget-notification-percentage type="decimal">80.0</over-budget-notification-percentage>
    <over-budget-notified-at type="date" nil="true"/>
    <show-budget-to-all type="boolean">false</show-budget-to-all>
    <updated-at type="datetime">2013-06-27T18:13:10Z</updated-at>
    <estimate nil="true"/>
    <estimate-by>none</estimate-by>
    <notes></notes>
    <hint-earliest-record-at type="NilClass">2013-06-24</hint-earliest-record-at>
    <hint-latest-record-at type="NilClass">2013-06-30</hint-latest-record-at>
    <hint-earliest-record-at>2013-06-24</hint-earliest-record-at>
    <hint-latest-record-at>2013-06-30</hint-latest-record-at>
  </project>
4

2 回答 2

0

您可以使用 {'hint-earliest-record-at'}

通过这种方式,您可以解析带有连字符的 xml 节点。

于 2013-07-13T08:29:25.357 回答
0

您必须修复 XML 文件中的字段名称。

此外,您的 XML 文件还有另一个问题:<hint-earliest-record-at>并且<hint-latest-record-at>出现了两次,因此您必须选择一个来删除或重命名。

我尝试了一个实验:

  1. 创建一个表,其中的列不包含破折号。
  2. 针对该表创建一个可更新的 VIEW,用破折号定义视图的列名
  3. 将 XML 加载到 VIEW 中,希望它插入到基表的相应列中。

但这没有用。它插入了一行,但所有值都作为 NULL 插入。

我还测试了使用普通列名创建一个没有破折号的 VIEW,然后我在 XML 中编辑了字段名。通过 VIEW 加载这个 XML 是可行的,并且行被插入到基表中。所以我知道 LOAD XML 适用于可更新的视图。

于 2013-07-12T20:32:31.790 回答