MySQL处理xml文件

参考资料

[1]. 13.2.7 LOAD XML Syntax
https://dev.mysql.com/doc/refman/5.5/en/load-xml.html

导出xml格式的文件

mysql --xml -e 'SELECT * FROM mydb.mytable' > file.xml

读取文件的语法格式

LOAD XML [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name'
    [REPLACE | IGNORE]
    INTO TABLE [db_name.]tbl_name
    [CHARACTER SET charset_name]
    [ROWS IDENTIFIED BY '<tagname>']
    [IGNORE number {LINES | ROWS}]
    [(field_name_or_user_var
        [, field_name_or_user_var] ...)]
    [SET col_name={expr | DEFAULT},
        [, col_name={expr | DEFAULT}] ...]

这个语句支持三种不同的XML格式:

  • 列名称作为属性和列值作为属性值:
<row column1="value1" column2="value2" .../>
  • 列名称作为标签和列值作为这些标签的内容
<row>
  <column1>value1</column1>
  <column2>value2</column2>
</row>
  • 列名称是标签的name属性 ,值是这些标签的内容:
<row>
  <field name='column1'>value1</field>
  <field name='column2'>value2</field>
</row>

在MySQL 5.5.46之前,LOAD XML没有 正确处理表单中的空XML元素。(错误#67542,错误#16171518)

操作实例

创建一个空表

USE test;

CREATE TABLE person (
    person_id INT NOT NULL PRIMARY KEY,
    fname VARCHAR(40) NULL,
    lname VARCHAR(40) NULL,
    created TIMESTAMP
);

准备一个简单的XML文件 person.xml

<list>
  <person person_id="1" fname="Kapek" lname="Sainnouine"/>
  <person person_id="2" fname="Sajon" lname="Rondela"/>
  <person person_id="3"><fname>Likame</fname><lname>Örrtmons</lname></person>
  <person person_id="4"><fname>Slar</fname><lname>Manlanth</lname></person>
  <person><field name="person_id">5</field><field name="fname">Stoma</field>
    <field name="lname">Milu</field></person>
  <person><field name="person_id">6</field><field name="fname">Nirtam</field>
    <field name="lname">Sklöd</field></person>
  <person person_id="7"><fname>Sungam</fname><lname>Dulbåd</lname></person>
  <person person_id="8" fname="Sraref" lname="Encmelt"/>
</list>

将数据从person.xml导入到person表

# 使用关键字LOCAL,文件存储在本地的模式
LOAD XML LOCAL INFILE '/root/person.xml'
INTO TABLE person
ROWS IDENTIFIED BY '<person>';

# 不使用关键字LOCAL,查看数据存储地址,并将文件放入,即文件存放在数据库的存储文件夹
show variables like '%datadir%';
LOAD XML INFILE 'person.xml'
INTO TABLE person
ROWS IDENTIFIED BY '<person>';

创建另外一个空表

CREATE TABLE individual (
individual_id INT NOT NULL PRIMARY KEY,
name1 VARCHAR(40) NULL,
name2 VARCHAR(40) NULL,
made TIMESTAMP
);

将数据导入

因为字段不一样,所以需要使用set指定对应的字段

LOAD XML INFILE '../bin/person-dump.xml'
INTO TABLE test.individual (@person_id, @fname, @lname, @created)
SET individual_id=@person_id, name1=@fname, name2=@lname, made=@created;
MySQL可以处理XML格式的数据,可以使用XML函数和方法来解析和查询XML数据。以下是一些常用的XML函数和方法: 1. ExtractValue:用于从XML文档中提取单个值。 2. UpdateXML:用于更新XML文档中的元素或属性。 3. InsertXML:用于将新元素或属性插入到XML文档中。 4. DeleteXML:用于从XML文档中删除元素或属性。 5. Xpath:用于在XML文档中执行XPath查询。 下面是一个示例,演示如何使用MySQL处理XML数据: ``` CREATE TABLE xml_data ( id INT PRIMARY KEY, data XML ); INSERT INTO xml_data (id, data) VALUES (1, '<bookstore> <book category="cooking"> <title lang="en">Everyday Italian</title> <author>Giada De Laurentiis</author> <year>2005</year> <price>30.00</price> </book> <book category="children"> <title lang="en">Harry Potter</title> <author>J.K. Rowling</author> <year>2005</year> <price>29.99</price> </book> </bookstore>'); -- 查询所有书的作者 SELECT ExtractValue(data, '//book/author') AS author FROM xml_data; -- 将所有书的价格增加10美元 UPDATE xml_data SET data = UpdateXML(data, '//book/price/text()', CAST(CAST(ExtractValue(data, '//book/price/text()') AS DECIMAL(10, 2)) + 10 AS CHAR(10))) WHERE id = 1; -- 删除所有类别为children的书 UPDATE xml_data SET data = DeleteXML(data, '//book[@category="children"]') WHERE id = 1; ``` 在上面的示例中,我们创建了一个名为xml_data的表,其中包含id和data两个字段。data字段的数据类型为XML。我们向表中插入了一条XML数据,并使用ExtractValue函数查询了所有书的作者。接着,我们使用UpdateXML函数将所有书的价格增加了10美元,并使用DeleteXML函数删除了所有类别为children的书。 需要注意的是,MySQLXML函数和方法并不是非常强大,对于复杂的XML数据处理可能会有些局限。如果需要处理更复杂的XML数据,建议使用专门的XML处理工具或编程语言。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值