如果我的行没有“名称”,我可以使用MySQL LOAD XML LOCAL INFILE吗?

问题描述:

我有一些XML,我试图直接加载到MySQL表中。我对“ROWS IDENTIFIED BY”的想法相当满意,但我坚持要保存元素的标签和元素的文本值。我会尽力解释:如果我的行没有“名称”,我可以使用MySQL LOAD XML LOCAL INFILE吗?

我创建了一个MySQL表:

CREATE TABLE stat (
    Type VARCHAR(40) NOT NULL, 
    uID VARCHAR(40) NOT NULL, 
    value VARCHAR(40), 
    created TIMESTAMP, 
    PRIMARY KEY (Type, uID) 
); 

,现在我想加载XML是格式为:

<Employee uID="p17336"> 
    <Name>Joe Bloggs</Name> 
    <Stat Type="first_name">Joe</Stat> 
    <Stat Type="last_name">Bloggs</Stat> 
    <Stat Type="birth_date">1985-07-26</Stat> 
    </Employee> 

我想是每个Stat元素的'Type'在MySQL中填充'Type'列(工作正常),然后是元素的实际文本(例如'Joe')来填充'value'列。我怎样才能做到这一点?目前我正在尝试:

LOAD XML LOCAL INFILE 'C:/dev/Sample/employees.xml' 
INTO TABLE stat 
ROWS IDENTIFIED BY '<Stat>'; 

而且我正在填写正确填充的所有字段,除了'值',它是NULL。任何想法非常感谢!

由于LOAD XML Syntax下记载:

本声明支持三种不同的XML格式:

  • 列名属性和列值的属性值:

    <row column1="value1" column2="value2" .../>
  • 列名称作为标签和列值作为这些标签的内容:

    <row> 
        <column1>value1</column1> 
        <column2>value2</column2> 
    </row>
  • 列名是<field>标签name属性,和值是这些标签的内容:

    <row> 
        <field name='column1'>value1</field> 
        <field name='column2'>value2</field> 
    </row>

    这是mysqldump通过其他MySQL工具使用的格式,例如。

因为你的XML是没有这些支持的格式,你必须使用一些其他的工具来分析它。

+0

我在mysql文档上看到了这个,我希望能有一些映射技巧,我可以做到解决它......我决定使用hyperjaxb来创建jaxb映射和hibernate实体映射,并使用这些加载和存储。 – Matt 2013-04-22 13:12:53