技术开发 频道

如何在MySQL数据库中使用XML数据

  使用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()函数的使用介绍。

2
相关文章