`
xueyue521q
  • 浏览: 6113 次
社区版块
存档分类
最新评论

mysql读取xml

 
阅读更多

通过XML使系统之间的数据交换变得更简单,因为它与编程语言无关,刚引入XML的概念时,是通过一个脚本或应用程序解析XML数据,将其转换为适合于数 据库和底层系统的有效格式,后来,随着数据库技术的发展,数据库开始支持XML数据,这样就不用转换程序了。今天我将给大家介绍一下MySQL数据库对 XML的支持,着重介绍如何导入XML数据到MySQL数据库中,以及如何从MySQL数据库导出XML格式数据。

  使用--xml选项将数据导出为XML格式

  在MySQL 5.0之前的版本中,使用MySQL命令行客户端以XML格式导出数据时有诸多限制,执行一个命令或查询时使用--xml或-X选项告诉MySQL客户端将结果输出为XML数据,例如,下面的命令将输出所有以version开头的数据库变量。

C:>mysql -u < userid > -p < password > -e     "SHOW VARIABLES LIKE '%version%'" –-xml

  最终输出的XML包括下面的标准格式:

   整个数据集都包括在节点中;

   每一行对应一个节点;

   所有列包括在一个节点中;

   列名出处在name属性中;

   列值是一个文本节点。

<? xml version="1.0" ?>
< resultset statement ="SHOW VARIABLES LIKE '%version%'"
    xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance" >
  
< row >
        
< field name ="Variable_name" > protocol_version </ field >
        
< field name ="Value" > 10 </ field >
  
</ row >
  
< row >
        
< field name ="Variable_name" > version </ field >
        
< field name ="Value" > 5.1.30-community </ field >
  
</ row >
  
< row >
        
< field name ="Variable_name" > version_comment </ field >
        
< field name ="Value" > MySQL Community Server (GPL) </ field >
  
</ row >
  
< row >
        
< field name ="Variable_name" > version_compile_machine </ field >
        
< field name ="Value" > ia32 </ field >
  
</ row >
  
< row >
        
< field name ="Variable_name" > version_compile_os </ field >
        
< field name ="Value" > Win32 </ field >
  
</ row >
</ resultset >

  为了便于对比,下面给出上面的命令表格化输出结果。

+-------------------------+---------------------+
| Variable_name             | Value                  |
+-------------------------+---------------------+
| protocol_version          | 10                     |
| version                     | 5.1.22-beta-debug   |
| version_comment           | Source distribution |
| version_compile_machine | x86_64                 |
| version_compile_os       | suse-linux-gnu        |
+-------------------------+---------------------+

  同样的语法可以应用到SELECT语句中,在我以前的一篇文章“借助临时表让你的MySQL查询效率更高”中,最开始的查询中我就用logical_delete_indicator=0的记录填充client_citizenship临时表。

INSERT INTO client_citizenship
SELECT     cl.client_id,
    cl.date_of_birth,
    cl.gender,    
    cit.citizenship_id,
    cit.country_code,
    cit.primary_citizenship
FROM      temp_table_article.client AS cl,  
    temp_table_article.citizenship AS cit,  
    temp_table_article.client_citizenship_rel AS rel  
WHERE   cl.client_id                 = rel.client_id
AND     cit.citizenship_id           = rel.citizenship_id
AND     cit.logical_delete_indicator = 0
AND     cl.logical_delete_indicator  = 0;

  在这个临时表上执行“SELECT *”查询返回下面的记录:

client_id, date_of_birth, gender, citizenship_id, country_code, primary_citizenship
2,         1944-01-15,    F,      4,              20,           0
2,         1944-01-15,    F,      7,              77,           1

  当我加上--xml选项后,“SELECT *”查询将返回下面的XML格式结果:

<? xml version="1.0" ?>
< resultset statement ="SELECT * FROM client_citizenship"
xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance" >
  
< row >
        
< field name ="client_id" > 2 </ field >
        
< field name ="date_of_birth" > 1944-01-15 </ field >
        
< field name ="gender" > F </ field >
        
< field name ="citizenship_id" > 4 </ field >
        
< field name ="country_code" > 20 </ field >
        
< field name ="primary_citizenship" > 0 </ field >
  
</ row >
  
< row >
        
< field name ="client_id" > 2 </ field >
        
< field name ="date_of_birth" > 1944-01-15 </ field >
        
< field name ="gender" > F </ field >
        
< field name ="citizenship_id" > 7 </ field >
        
< field name ="country_code" > 77 </ field >
        
< field name ="primary_citizenship" > 1 </ field >
  
</ row >
</ resultset >

  使用--xml选项的缺点是从关联的数据到XML的映射是固定的,因此无法修改输出。如果你想做某些字符串操作,可以去掉--xml选项,按你自己的方式生成XML代码。

  继续沿用前面的查询,我们再来看看如何修改输出的XML,使其符合下面的格式要求:

< client >
        
< client_id > 2 </ client_id >
        
< date_of_birth > 1944-01-15 </ date_of_birth >
        
< gender > F </ gender >
        
< citizenship_id > 7 </ citizenship_id >
        
< country_code > 77 </ country_code >
        
< primary_citizenship > 1 </ primary_citizenship >
  
</ client >

  其中一个可行的办法是使用CONCAT() 和 GROUP_CONCAT()字符串函数。

mysql>SELECT CONCAT('n < client > n',
    ->GROUP_CONCAT('
< client_id > ', client_id, ' </ client_id > n' SEPARATOR ''),
    ->GROUP_CONCAT('
< date_of_birth > ',date_of_birth,' </ date_of_birth > n' SEPARATOR ''),
    ->GROUP_CONCAT('
< gender > ',gender,' </ gender > n' SEPARATOR ''),
    ->GROUP_CONCAT('
< citizenship_id > ',citizenship_id,' </ citizenship_id > n' SEPARATOR ''),
    ->GROUP_CONCAT('
< country_cd > ',country_cd,' </ country_cd > n' SEPARATOR ''),
    ->GROUP_CONCAT('
< primary_citizenship > ',primary_citizenship,' </ primary_citizenship > n' SEPARATOR ''),
    ->'
</ client > ') AS xmldoc
    ->FROM client_citizenshipG

  虽然我们使用这种变通的方法达到了目标,但这样做还不如使用脚本或编程语言执行格式化,当然这得看你是否熟悉相关脚本或编程语言了。

 

使用Load_File()函数导入XML数据

  MySQL 5.1.5包括了两个新的函数:ExtractValue()和UpdateXML()。

  ExtractValue():使用XPath符号从XML字符串提取值。

  UpdateXML():返回一个替代的XML片段。

  MySQL中导入XML数据最常用的方法是使用LOAD_FILE()函数打开一个完整的XML文档,将其存储 在 一个变量中,然后将变量插入到一个表列中。这里还是以client_citizenship表为例进行说明,但这一次它只包括两个字段:一个自增长的ID 和一个xml_data列(就是由它存储XML文档),TEXT数据类型非常适合用在这个列上,因为它可以容纳非常长的字符串。

CREATE TEMPORARY TABLE client_citizenship (
    id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    xml_data TEXT NOT NULL
);
SET @xml = LOAD_FILE("c:\client_citizenships.xml");
INSERT INTO client_citizenship VALUES (NULL, @xml);

  现在我们可以使用ExtractValue()函数从xml_data字段检索变量了,ExtractValue()函数有两个参数,第一个是 被检查的XML片段,第二个是XPath表达式。XPath是一门专门设计用于查询XML文档中节点信息的语言,在www.w3.org网站有完整的 XPath介绍。XPath参数在元素选择器中可以包括冒号“:”,以支持命名空间。检索数据包括两步,首先从client_citizenship表获 得XML,然后将其放进变量。

SELECT xml_data FROM client_citizenship LIMIT 1 INTO @xml;

  现在我们使用ExtractValue()函数,@xml作为第一个参数,XPath字符串作为第二个参数进行查询: 

SELECT ExtractValue(@xml, '//row[2]/field[1]/@name'),

  ExtractValue(@xml, '//row[2]/field[1]');

  在前一个ExtractValue()调用中,XPath表达式检索第二个中的第一个元素的name属性的值,如果你再次调用,name属性会包含列头;第二个XPath表达式提取文本节点,当然包括字段的值了。

...
</ row >
< row > (row[2])
    
< field name ="client_id" > 2 </ field > (field[1])
    
< field name ="date_of_birth" > 1944-01-15 </ field >
...

  下面显示的是上面的查询格式化输出结果:

+----------------------------------------------+----------------------------------------+
|ExtractValue(@xml, "//row[2]/field[1]/@name") |ExtractValue(@xml, '//row[2]/field[1]') |
+----------------------------------------------+----------------------------------------+
|client_id                                     |2                                       |
+----------------------------------------------+----------------------------------------+

  在下一篇文章中,我们将看到一种更好的格式化结果集的方法,以便列标题可以更好地展示。此外,我将会扩展上面的例子,使用存储过程检索整个XML文档,最后还将看到UpdateXML()函数的使用介绍。

分享到:
评论

相关推荐

    java读取xml文件导入到mysql数据库中

    xml文件导入到mysql数据库中,包括文件:ConnectionUtils.java,InsertDT.java,db_mysql.properties,test01.xml,需要的jar包dom4j-1.6.1.jar,mysql-connection-java-3.1.1.3-bin.jar,jaxen-1.1-beta-7.jar

    mysql数据库自动生成xml文件

    一旦配置完成,运行Generator,它会读取配置,连接到MySQL数据库,然后生成指定的Java源代码和XML映射文件。 在生成的XML文件中,通常包含了SQL的增删改查(CRUD)操作,这些操作与Model类对应,使得开发人员可以...

    MySql读写Xml两种方式性能比较

    然而,由于XML不是MySQL的原生数据类型,因此需要使用特定的函数和方法来解析和操作XML内容。 2. **`ExtractValue`函数** `ExtractValue`是MySQL提供的一种XML处理函数,用于从XML文档中提取指定路径的值。它的...

    Xml_2_Mysql.rar_XML mysql_mysql xml

    这些类提供了读取、遍历和操作XML文档的方法。 2. **创建数据库和表**:根据XML的结构,我们可能需要在MySQL中创建相应的数据库和表。表的字段应与XML元素相对应。这一步可以通过SQL语句实现,例如`CREATE TABLE`。...

    mysql数据表导出生成xml文件和树形结构

    MySQL 数据表导出生成 XML 文件是一项常见的数据转换任务,它允许我们把数据库中的结构化数据转化为一种便于交换和处理的格式。XML(eXtensible Markup Language)是一种标记语言,常用于存储、传输和表示数据,尤其...

    mysql数据库对xml的支持

    二是提供了专门用于处理XML文档的操作函数。这些功能使得MySQL不仅能够高效地存储XML数据,还能方便地查询和更新这些数据。 #### 创建XML数据表及插入XML文档 在创建支持XML的表时,通常会选择`VARCHAR`或`TEXT`...

    access ,sqlserver,oracle,mysql与xml之间的相互转换

    在标题提到的"access, sqlserver, oracle, mysql与xml之间的相互转换"中,我们探讨的是如何使用编程语言(在这个案例中是Java)来实现在不同数据库系统和XML数据格式间的转换。XML(eXtensible Markup Language)是...

    XML备份MySQL资料库

    XML备份MySQL数据库是一种将数据库中的数据转换为XML格式并存储为文件的过程,这对于数据的迁移、备份或在不同系统间交换数据非常有用。XML(eXtensible Markup Language)是一种可扩展标记语言,它允许结构化数据的...

    Java读取XML文件内容存储到MySQL

    在Java开发中,将XML文件的内容读取并存储到MySQL数据库是常见的操作,尤其是在数据迁移、数据处理或系统集成的场景。本篇将详细介绍如何利用Java技术栈,结合MyBatis和SpringBoot框架来实现这一功能。 首先,我们...

    使用java解析XML文件,解析完之后将解析结果导入mysql数据库中

    然后,调用`parse()`方法读取XML文件并将其解析为`Document`对象。 - JAXB解析:如果XML文件与Java对象模型有明确的一对一关系,JAXB提供了一种更便捷的方法。使用`Unmarshaller`可以从XML文件中创建Java对象,而`...

    MySql性能优化-通过使用XML将多次循环处理变为一次集合处理

    而数据库与编程语言之间通常通过各种参数来进行交互,而XML刚好是它们之间的一个桥梁,把编程语中向面对象的数据序列化为XML,传递到数据库,数据库再转换为平面表,实现高效的集合操作。本文将深入的分析各种解决...

    JSTL操作XML JSTL操作XML

    通过本实验的学习,我们不仅掌握了如何使用JSTL操作XML的基本方法,还学会了如何将XML作为配置文件使用,并在JSP中利用JSTL来读取配置文件以实现数据库连接。这种方式大大提高了Web应用程序的灵活性和可维护性。此外...

    DBXML.ZIP_XML mysql_dbxml_netbeans mysql_netbeans platform_xml m

    7. **XML解析器**:为了读取和写入XML文件,程序可能使用DOM(文档对象模型)、SAX(简单API for XML)或StAX(流式API for XML)等解析器。 8. **项目构建与部署**:在NetBeans中,开发者可以方便地构建和部署应用...

    Mysql Workbench汉化xml

    "Mysql Workbench汉化xml" 提供了解决这一问题的方案,它涉及到XML文件的编辑和翻译工作,以实现软件界面的本地化,即汉化过程。 XML(Extensible Markup Language)是一种标记语言,常用于存储、传输和展示数据。...

    jdom从MYSQL导出XML文件

    标题“jdom从MYSQL导出XML文件”表明我们要讨论的是如何使用Java的JDOM库将数据从MySQL数据库导出到XML文件的过程。JDOM是一个专为Java设计的XML处理库,它提供了简单、高效的API来读写XML文档。MySQL则是一种广泛...

    MYSQL逆向工程自自动生成xml及PO文件

    MySQL逆向工程是一种高效的方法,它允许开发人员从现有的数据库结构快速生成相关的代码,如XML映射文件和Java PO(Plain Old Java Object)类。在Java Web开发中,特别是使用MyBatis框架时,这种技术可以极大地提高...

    里面有mysql基本操作,自定义jsp标签,XML的解析

    XML文档解析通常涉及读取和处理XML文件,提取所需的信息或验证其结构的有效性。 - **DOM(Document Object Model)**:将整个XML文档加载到内存中并构建一个树形结构,允许随机访问文档中的任何部分。 - **SAX...

    将关系型数据库MySQL存储数据转换为XML文件的实现

    【MySQL与XML之间的数据转换】 随着信息技术的飞速发展,数据传输的需求日益增强,XML(eXtensible Markup Language)因其强大的数据交换能力和结构描述能力,成为网络数据交互的重要工具。MySQL作为广泛应用的关系...

    代码自动生成 mybatis+mysql8.0 实体映射xml类生成工具

    在IT行业中,代码生成工具是提高开发效率的重要手段,尤其对于数据库操作的代码,如实体类、Mapper接口和对应的XML映射文件。本主题聚焦于一个特定的代码生成工具,适用于MyBatis框架并兼容MySQL 8.0数据库。这个...

    从数据库中读取数据自动生成XML

    从数据库中读取数据自动生成XML 在本篇文章中,我们将讨论如何从数据库中读取数据自动生成XML文件。XML(Extensible Markup ...使用 ASP.NET,我们可以轻松地读取和更新 XML 文件,并实现 XML 文件的增删改查操作。

Global site tag (gtag.js) - Google Analytics