在MySQL中使用XML数据—数据格式化
在MySQL中运用XML数据数据格式化 数据复原软件 // xunlongsoft 在ExtractValue函数输出中添加我们自己的标题 在上一篇文章中,我们运用LOAD_FILE函数导入了一个XML文档,然后运用ExtractValue函数提取了某些字段。 CREATE TEMPORARY TABLE client_citizenship id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, xml_data TEXT NOT NULL ; SET xml LOAD_FILEc\\client_citizenships.xml; INSERT INTO client_citizenship VALUES NULL, xml; SELECT xml_data FROM client_citizenship LIMIT 1 INTO xml; SELECT ExtractValuexml, //row[2]/field[1]/name, ExtractValuexml, //row[2]/field[1]; 最终一个SELECT语句提取的是其次个节点中的第一个。 ... row[2] 2field[1] 1944-01-15 ... 其结果集如下 -------------------------------------------------------------------------------------- |ExtractValuexml, //row[2]/field[1]/name |ExtractValuexml, //row[2]/field[1] | -------------------------------------------------------------------------------------- |client_id |2 | -------------------------------------------------------------------------------------- 留意MySQL运用的是表达式作为列的标题,为了运用列字段名格式化结果集的标题,我们须要运用Prepared Statement,Prepared Statement是一种特别类型的SQL语句,它是预编译的,这意味着Prepared Statement执行时,数据库不用再编译SQL了,这样可以有效削减执行时间。在这个例子中,运用Prepared Statement的好处是可以设置标题,然后连接到我们的查询字符串中。 SET header SELECT ExtractValuexml, //row[2]/field[1]/name; SET qry CONCATSELECT ExtractValuexml, \//row[2]/field[1]\ AS , header, ;; PREPARE stmt FROM qry; CUTE stmt; DEALLOCATE PREPARE stmt; 现在我们看到的数据格式就是和我们平常看到的一样了。 ----------- | client_id | ----------- | 2 | ----------- 在存储过程中运用ExtractValue函数 上面运用的方法最大的缺陷就是在代码中写死了要检索的行,这样很不敏捷,下面我们运用一个存储过程来解决这个问题。 MySqlDump 有Igor Romanenko编写的MySqlDump客户端最初是一个备份程序,它可以备份数据库,或将一个数据库转移到另一个数据库MySQL或其它数据库,它的这个备份过程其实是一个创建表,填充表的过程。此外,MySqlDump还可以生成CSV,XML或其它由分隔符限制的文本文件。 虽然不止一种执行MySqlDump的方法,但我想运用下面的语法 mysqldump --xml databasename [tables] 你也可以运用标准的Unix/Dos方法输出到一个文件,如下面的吩咐将一个表转成一个XML文件 C\mysqldump --xml temp_table_article client c\\sqldump.xml 打开sqldump.xml看看,我们发觉MySqlDump客户端包括了比--xml选项更多的信息,但它却是按每一行、字段名和值的方式输出的,MySqlDump将表结构和表数据单独输出。 CollationA Cardinality4 Null Index_typeBTREE Comment / CollationA Cardinality4 Null Index_typeBTREE Comment / Data_length16384 Max_data_length0 Index_length16384 Data_free10485760 Auto_increment5 Create_time2009-10-05 175134 Collationlatin1_swedish_ci Create_options Comment / 1 1976-02-12 M 1 2 1944-01-15 F 0 3 1956-06-04 M 1 4 1938-11-19 F 0 我们运用这个工具创建XML数据结构的缘由是已经有存储过程可以将MySqlDump XML数据插入到表中,MySQL开发人员Alexander Barkov编写了这样一个存储过程xmldump_load,这个存储过程可以从mysqldump --xml吩咐输出的XML文档中提取数据,并将提取到的数据插入到MySQL表的列中,下面是这个存储过程的全部代码。 DELIMITER | DROP PROCEDURE IF EXISTS xmldump_load | CREATE PROCEDURE xmldump_load file_name VARCHAR128, database_name VARCHAR128, table_name VARCHAR128 BEGIN DECLARE xml TEXT; DECLARE nrows INT; DECLARE rownum INT DEFAULT 1;