MySQL 5.1.5版本中添加了对XML文档进行查询和修改的函数,分别是ExtractValue()和UpdateXML(),下面是这两个函数的使用示例:
还是一样我们首先建立一个示例数据库,然后将范例中使用的XML文档输入到数据库中:
CREATE TABLE x (doc VARCHAR(150));
INSERT INTO x VALUES
('
<book>
<title>A guide to the SQL standard</title>
<author>
<initial>CJ</initial>
<surname>Date</surname>
</author>
</book>
');
INSERT INTO x VALUES
('
<book>
<title>SQL:1999</title>
<author>
<initial>J</initial>
<surname>Melton</surname>
</author>
</book>
');
大家可以看到,doc列的内容中包含了自己的层次结构,以XML格式体现包含书名和作者的书本,其中作者还包含名字简写大写以及姓。这是流行的排版和储存格式,字母"<book>" 和</book>"是标记,使用户更容易理解内部的层次结构。
下面先看看ExtractValue()的用法吧
语法:
EXTRACTVALUE (XML_document, XPath_string);
第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc
第二个参数:XPath_string (Xpath格式的字符串) ,如果不了解Xpath语法,可以在网上查找教程。
作用:从目标XML中返回包含所查询值的字符串
示例#E1:
mysql> SELECT EXTRACTVALUE(doc,'/book/author/initial') FROM x;
+------------------------------------------+
| EXTRACTVALUE(doc,'/book/author/initial') |
+------------------------------------------+
| CJ |
| J |
+------------------------------------------+
2 rows in set (0.01 sec)
可以看到,EXTRACTVALUE()函数将/book/author/initial节点中的值取出来,并通过Select返回。因此需要简单的查找XML文档中的值,只要在XPath_string参数中指定好层次和节点就行了。
示例#E2
mysql> SELECT EXTRACTVALUE(doc,'/*/*/initial') FROM x;
+----------------------------------+
| EXTRACTVALUE(doc,'/*/*/initial') |
+----------------------------------+
| CJ |
| J |
+----------------------------------+
2 rows in set (0.01 sec)
如果查询前并不知道层次关系,你也可以使用通配符进行层次的匹配,不过当XML文档比较大的时候查找速度会很慢滴。
示例#E3
mysql> SELECT extractValue(doc,'/book/child::*') FROM x;
+---------------------------------------------+
| extractValue(doc,'/book/child::*') |
+---------------------------------------------+
| A guide to the SQL standard |
| SQL:1999 |
+---------------------------------------------+
2 rows in set (0.00 sec)
使用/book/child::语句我们可以找到Book节点下的首个节点,文中是title。除了child以外,我们还有其他的参数:
child ... 指定节点的下一子节点)
descendant ... 节点下包含的所有层次中的数据
parent ... 指定节点的上一节点
ancestor ... 节点以上所有层次的数据
following-sibling ... 同一层次的下一个节点
preceding-sibling ... 同一层次的上一个节点
self ... 自身
示例#E4
mysql> select
extractValue(doc,'/book/author/surname[self:text()="Date"]') from x;
+--------------------------------------------------------------+
| extractValue(doc,'/book/author/surname[self:text()="Date"]') |
+--------------------------------------------------------------+
| Date |
| |
+--------------------------------------------------------------+
2 rows in set (0.00 sec)
这里是一个使用条件表达式进行数据查找的例子,具体就不解释了,都是符合Xpath语法的,大家可以参考一下Xpath表达式的用法。
虽然上面的extractValue()函数都使用在SELECT列表中,其实该函数是可以使用在任何一个允许使用表达式的语句中的。
这里提示一点,使用这个函数可以轻松将XML文档列与全文检索结合起来。
来到UpdateXML()函数了
语法
UPDATEXML (XML_document, XPath_string, new_value);
第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc
第二个参数:XPath_string (Xpath格式的字符串) ,如果不了解Xpath语法,可以在网上查找教程。
第三个参数:new_value,String格式,替换查找到的符合条件的数据
作用:改变文档中符合条件的节点的值
示例#U1
mysql> select UpdateXML(doc,'/book/author/initial','!!') from x;
+----------------------------------------------------------+
| UpdateXML(doc,'/book/author/initial','!!') |
+----------------------------------------------------------+
|
<book>
<title>A guide to the SQL standard</title>
<author>
!!
<surname>Date</surname>
</author>
</book> |
|
<book>
<title>SQL:1999</title>
<author>
!!
<surname>Melton</surname>
</author>
</book> |
+----------------------------------------------------------+
2 rows in set (0.00 sec)
UpdateXML函数的前两个参数用法以及写法与ExtractValue是一样的,因为这里需要查找到符合条件的数据节点。第三个参数就是为了替换节点字符串的。文中我们就使用!!字符串替换了book/author/initial节点的值。返回值是整个改变后的XML文档。这里记住,由于我们使用的是Select语句,因此并没有对真正的数据进行修改,而是在内存中将取出的数据进行修改然后返回给用户。如果需要彻底的修改文档内容,可以使用下面语句:
UPDATE x SET doc = UpdateXML(doc,/book/author/initial','!!');
细心的人也许发现这里有一个错误,也许是Bug,因为我们并不想修改结构化的文档,而仅仅需要修改内容,但UpdateXML函数将<initial>CJ></initial>整个文本改成了!!,这样就不是我们所想要的了,因为它改变了整个文档结构。因此如果你需要的仅仅是修改这个结构化文档的内容部分,而不是整个文本,可以使用:
UpdateXML(doc,'/book/author/initial','<initial>!!</initial>') from x;
示例#U2
mysql> select
extractvalue(
UpdateXML(doc,'/book/author/initial','<initial>!!</initial>'),'/book/author/
initial') from x;
+---------------------------------------------------------------------------
--------------------------+
|
extractvalue(
UpdateXML(doc,'/book/author/initial','<initial>!!</initial>'),'/book/author/
initial') |
+---------------------------------------------------------------------------
--------------------------+
| !!
|
| !!
|
+---------------------------------------------------------------------------
--------------------------+
2 rows in set (0.01 sec)
最后一个例子,ExtractValue()函数和UpdateXML()函数的嵌套使用,结果是给我们展示将initial节点的值改成!!后选择查询initial节点的内容,结果大家也能看到了。
上面只是这两个函数的最基本用法,如果大家还需要更多的资料,或有一些自己的心得,欢迎一起讨论。
分享到:
相关推荐
MySQL中的XML支持主要体现在两个方面:一是能够将XML文档存储在MySQL的字段中;二是提供了专门用于处理XML文档的操作函数。这些功能使得MySQL不仅能够高效地存储XML数据,还能方便地查询和更新这些数据。 #### 创建...
- **可扩展性和灵活性**:虽然`ExtractValue`简单易用,但其功能有限,对于复杂的XML操作可能不如使用支持XPath和XQuery的完整XML库。 7. **优化策略** - 分离处理:避免一次性处理大量XML数据,可以分批处理以...
在标题提到的"access, sqlserver, oracle, mysql与xml之间的相互转换"中,我们探讨的是如何使用编程语言(在这个案例中是Java)来实现在不同数据库系统和XML数据格式间的转换。XML(eXtensible Markup Language)是...
【标题】"DBXML.ZIP"是一个压缩包,其中包含了多个与XML和MySQL数据库相关的项目。这个工具的主要目的是将MySQL服务器上的数据库转换成XML格式,从而实现数据的灵活处理和跨平台交换。它利用了NetBeans作为开发平台...
1. **支持mysql8.0版本的mybatis代码生成工具**:这表明该工具已经更新以适应MySQL 8.0的语法和特性,开发者无需担心版本兼容性问题。例如,它可能能够处理MySQL 8.0引入的窗口函数、JSON字段类型等新功能。 2. **...
XML文件是纯文本格式,跨平台性强,支持异构系统之间的数据交换。这使得XML成为了网络应用和数据库间数据交换的理想选择。 MySQL数据库以其小巧、高效、低成本的特性,在互联网上广泛应用。然而,由于其关系型特性...
标题“jdom从MYSQL导出XML文件”表明我们要讨论的是如何使用Java的JDOM库将数据从MySQL数据库导出到XML...如果你对XML和数据库操作不熟悉,理解这个过程可能会需要一些时间,但一旦掌握了,这将是一个非常实用的技能。
标题"mybatis导出xml文件(只支持mysql数据库)"指的是一个特定的功能,即在MySQL数据库环境下,能够自动生成MyBatis的XML映射文件。这个功能通常是为了提高开发效率,避免手动编写XML映射文件,这些文件定义了SQL查询...
此版本增强了性能,优化了用户体验,且对多种数据库系统(如MySQL、Percona Server)提供了全面的监控支持。 二、Percona MySQL介绍 Percona MySQL是MySQL的一个高性能、高可用性增强版,它包含了多个性能优化和...
10. **集成开发环境(IDE)支持**:现代IDE如IntelliJ IDEA或Eclipse提供了对MyBatis的插件支持,可以直接在IDE中进行配置和生成MyBatis相关文件,简化了开发流程。 通过以上步骤,开发者可以快速地建立起与MySQL...
7. **动态SQL**:MyBatis的XML映射文件支持动态SQL,可以实现条件判断、循环等复杂逻辑,使得SQL更具灵活性。 通过使用MyBatis和MySQL本地自动生成映射类和XML文件的功能,开发者可以极大地减少重复劳动,提升开发...
这款驱动包的显著特点在于它的兼容性,不仅支持最新的MySQL 8.0版本,同时也向下兼容较早的MySQL 5.5、5.6以及5.7版本。这种广泛的兼容性对于那些需要在不同MySQL环境之间迁移或测试的开发者来说尤其重要,因为他们...
版本号5.1.39表明这是MySQL 5.1系列的一个稳定版本,提供对Java 6及更高版本的支持。 在实际开发中,将`log4j.xml`和`mysql-connector-java-5.1.39-bin.jar`整合到项目中,可以帮助我们实现以下功能: 1. **日志...
MySQL支持多种数据类型,包括整数类型、浮点数类型、定点数类型、时间类型、字符串类型以及二进制类型。 ##### 整数类型、浮点数类型和定点数类型 - **整数类型**主要包括TINYINT、SMALLINT、MEDIUMINT、INT 和 ...
【XML网站的源代码基于MySQL+Apache】是一个用于构建基于XML技术的在线论坛系统的项目,其核心技术栈包括XML(eXtensible ...对于希望提升Web开发技能,特别是对XML技术感兴趣的初学者来说,这是一个宝贵的实践资源。
这个系统利用了MySQL数据库来持久化存储大量的销售记录,同时结合XML文件进行数据交换和配置管理。以下是对该系统相关知识点的详细介绍: 1. **QT框架**:QT是一个跨平台的C++库,它提供了丰富的用户界面组件和工具...
用Swing实现的业余羽毛球活动费用管理系统,可用于统计羽毛球活动的成本和记录会员的费用明细,本人热爱羽毛球活动并且组织羽毛球活动,利用业余时间编写了此系统,支持mysql和xml两种存储数据方式,对xml的数据读取...
通过对Java语言深入理解,配合MySQL的数据库操作,XML的配置管理,以及JSON的数据交换,开发者可以更快速、更稳定地构建复杂的应用系统。同时,这个压缩包中的"java0323"资源将帮助初学者和有经验的开发者更好地理解...
在处理大量数据时,XML文件常被用作数据交换格式,因为它支持复杂的数据结构和易于解析。本插件名为“获取xml数据并导入MySQL小插件”,其主要功能是帮助Discuz! 用户从XML文件中提取数据并将其有效地导入到MySQL...
"main_menu.xml"文件包含了对MySQL Workbench菜单栏的所有菜单项的中文翻译,例如“文件”、“编辑”、“查看”、“服务器”、“数据”、“开发”等,使得用户在使用过程中可以更加直观地理解各项功能。 汉化过程...