---
title: "从关系型数据库创建 XML 数据"
date: "2011-03-05"
tags: 
  - "cloud-services"
  - "database-tool"
  - "databasespy"
  - "mapforce"
  - "xml-editor"
  - "xmlspy"
description: 利用DatabaseSpy和XMLSpy，探索高效的方法，从关系型数据库中创建结构良好的XML文件，从而简化数据转换流程。
---
Status: #blog

Tags:  #cloud-services #database-tool #databasespy #mapforce #xml-editor #xmlspy

Categories: [Altova](/blog/zh/category/altova.md) 
# 从关系型数据库创建 XML 数据

有时，参考他人创建的示例是快速启动项目的有效方法。但缺点是，你可能会错过更好的、更高效的解决方案。在最近一篇关于[云端XML](https://www.altova.com/blog/2011/01/xml-in-cloud.html)的文章中，我们使用了[DatabaseSpy](https://www.altova.com/zh/databasespy.html)来连接本地的MySQL数据库以及亚马逊的云关系型数据库服务。我们使用SQL语句中的Concat()函数，将非XML数据转换为XML格式的输出，如下所示。 

[![DatabaseSpy SQL 查询和结果](https://lh5.ggpht.com/_REdrfeVqYdU/TXAFWTSfrEI/AAAAAAAAAWA/NLFW5WoHMRw/clip_image002_thumb%5B2%5D.gif?imgmax=800 "DatabaseSpy SQL query and result")](http://lh4.ggpht.com/_REdrfeVqYdU/TXAFVWm-iAI/AAAAAAAAAV8/d8jL8EwJ9gU/s1600-h/clip_image002%5B5%5D.gif) 

我们的SELECT语句是基于MySQL文档中关于XML支持的示例而编写的。 让我们更深入地探讨一下这个声明试图解决的问题。 您可以复制DatabaseSpy中的结果表格，就像上面展示的表格一样，然后将其粘贴到[XMLSpy](https://www.altova.com/zh/xmlspy.html)中的编辑窗口中，但仅凭结果表格本身无法创建符合XML规范的文档。 根据以下规定，必须符合以下标准： [W3C 的定义](http://www.w3.org/TR/2004/REC-xml-20040204/#sec-well-formed), 一个XML文档必须包含一个根元素。 所有其他元素和逻辑结构都必须嵌套在根元素内部。 您可以将根元素视为整个 XML 内容的“包裹”，就像我们在原始结果中，<city></city> 元素包裹着每一行数据一样。 **从关系型数据创建XML的更好方法** 我们无需手动编辑结果来添加根元素，也不需要修改已经复杂的SQL查询来添加根元素。 DatabaseSpy 软件可以帮助我们轻松地从数据库表中导出格式良好的 XML 文档，这些数据库表包含普通数据，例如我们的城市表。 在数据库导出对话框中，我们可以选择 XML 结构作为输出格式，点击“城市”表以从数据库结构中选择它，然后选择 XMLSpy 作为目标。 在导出对话框底部的“预览”区域，会显示表格内容的预览视图。 

[![数据库Spy 导出对话框 ](https://lh6.ggpht.com/_REdrfeVqYdU/TXAFWzPSEgI/AAAAAAAAAWI/8exV2WmHjVk/clip_image004_thumb%5B2%5D.jpg?imgmax=800 "DatabaseSpy Export Dialog ")](http://lh6.ggpht.com/_REdrfeVqYdU/TXAFWl-nGmI/AAAAAAAAAWE/x4aIWvoKfUo/s1600-h/clip_image004%5B5%5D.jpg) 

当我们点击“导出”按钮时，DatabaseSpy 会将关系型数据格式化为 XML 格式，其中 XML 元素的名称来源于表格的列名，并将生成的输出直接发送到 XMLSpy。下图显示了 XMLSpy 中该文件的一部分。位于底部的“消息”窗口验证了该文件格式正确。 

[![XMLSpy 编辑窗口和消息窗口](https://lh5.ggpht.com/_REdrfeVqYdU/TXAFXnLexvI/AAAAAAAAAWQ/5K3VWPBWKC4/clip_image006_thumb%5B1%5D.jpg?imgmax=800 "XMLSpy Editing window and Message window")](http://lh5.ggpht.com/_REdrfeVqYdU/TXAFXClQrzI/AAAAAAAAAWM/ct2iCbJiSDA/s1600-h/clip_image006%5B4%5D.jpg)

请注意，DatabaseSpy 提供了根元素 <Import name = “cities”>，并添加了注释来描述数据库表中列的数据类型。此外，我们无需构建包含复杂 `Concat()` 函数的 SQL 语句。我们开始这篇文章是为了解决一个简单的需求，即为我们之前描述的 `Concat()` 函数的输出添加一个根元素。然而，在实际项目中，将关系数据库转换为 XML 的需求通常会更加复杂。 

Altova [XMLSpy](https://www.altova.com/zh/xmlspy.html) 该软件可以直接连接到所有主流数据库，从而能够使用 XML 技术和关系型数据。XMLSpy 允许您轻松地从数据库结构创建 XML 模式，或者从 XML 模式创建数据库模式。此外，XMLSpy 还包含用于 XQuery 和 XPath 的高级编辑器和调试器，用于直接存储在数据库中的 XML 数据，并提供针对 Microsoft SQL Server、IBM DB2 和 Oracle 数据库中 XML 功能的专业支持。 随着越来越多的行业采用基于 XML 的信息交换标准，一个常见的需求是将存储在传统数据库中的数据转换为 XML 格式。Altova [MapForce](https://www.altova.com/zh/mapforce.html) 它可以连接到数据库，并允许您将关系型数据映射和转换，使其与一个或多个 XML 模式兼容。

您可以利用您的映射关系进行一次性数据转换。您也可以保存您的映射关系，稍后重新打开以进行另一次转换。或者，您可以指示 MapForce 根据您的映射关系生成免版税的源代码，并将这些源代码包含在您的项目中，以便在需要进行重复转换时使用。 

如果您想亲眼见证 Altova 工具如何从关系型数据库生成格式良好的 XML 数据， [下载免费试用版](https://www.altova.com/zh/download/missionkit/software_development_tools_enterprise.html) 的 [Altova MissionKit 套件](https://www.altova.com/zh/missionkit/software-development-tools.html).
