如何根据 XSD 从数据库导出数据到 xml
How to export data from database to xml according the XSD
我们有一个 XSD,我们想要一种根据 XSD 以 xml 格式导出数据的方法。数据现在在 SQL 数据库中,但我们使用 mysql 或其他数据库格式没有问题。我们需要将 XSD 映射到 table 数据,以便以 xml 格式导出它们。
知道了 from here
--创建与早餐菜单相关的测试table
CREATE TABLE Menus
(name varchar(255)
,price numeric(12,4)
,description varchar(1500)
,calories int);
--插入一些测试数据
Insert Into Menus Values ('eggs',22.22,'test description eggs',333);
Insert Into Menus Values ('steak',22.22,'test description steak',333);
Insert Into Menus Values ('big side of bacon',22.22,'test description bacon',333);
Insert Into Menus Values ('huge side of bacon',22.22,'test description more bacon',333);
Insert Into Menus Values ('OMG BACON!',22.22,'test description oh man, more bacon',333);
XSD 用于定义导出的模式
<?xml version="1.0"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="breakfast_menu">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="food">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="name" type="xs:string" />
<xs:element minOccurs="0" name="price" type="xs:string" />
<xs:element minOccurs="0" name="description" type="xs:string" />
<xs:element minOccurs="0" name="calories" type="xs:unsignedShort" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
-- SQL生成文件
DECLARE @MenuSchema XML
SET @MenuSchema = (
SELECT * FROM OPENROWSET
(BULK 'C:\Menu.xsd', SINGLE_CLOB)
AS xmlData)
--create the schema for using later in the XML type
CREATE XML SCHEMA COLLECTION MenuSchema AS @MenuSchema;
DECLARE @xmlData XML (MenuSchema)
SET @xmlData =
(SELECT
[name]
,price
,[description]
,calories
FROM
dbo.Menus [food]
FOR XML AUTO, ROOT ('breakfast_menu'), ELEMENTS)
SELECT @xmlData
如果您的 XSD 是 "attributes only" 或 "elements only",使用 SELECT ... FOR XML AUTO
有或没有 ELEMENTS
可能就足够了。
在大多数情况下 - 至少在我的工作中 - 我确实处理过混合 XML。
有 - AFAIK - 没有自动告诉 SQL 服务器:"Hey, here is a query, here is an XSD, go and prepare the fitting XML output!"
您必须创建一个您定义的 SELECT ... FOR XML PATH()
,输出适合您的 XSD。
然后您使用给定模式声明一个 XML 变量并尝试填充输出。这会起作用 - 或不会。那就是模式验证...
如果您找到自动创建它的方法,请post发表评论,谢谢!
我们有一个 XSD,我们想要一种根据 XSD 以 xml 格式导出数据的方法。数据现在在 SQL 数据库中,但我们使用 mysql 或其他数据库格式没有问题。我们需要将 XSD 映射到 table 数据,以便以 xml 格式导出它们。
知道了 from here
--创建与早餐菜单相关的测试table
CREATE TABLE Menus
(name varchar(255)
,price numeric(12,4)
,description varchar(1500)
,calories int);
--插入一些测试数据
Insert Into Menus Values ('eggs',22.22,'test description eggs',333);
Insert Into Menus Values ('steak',22.22,'test description steak',333);
Insert Into Menus Values ('big side of bacon',22.22,'test description bacon',333);
Insert Into Menus Values ('huge side of bacon',22.22,'test description more bacon',333);
Insert Into Menus Values ('OMG BACON!',22.22,'test description oh man, more bacon',333);
XSD 用于定义导出的模式
<?xml version="1.0"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="breakfast_menu">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="food">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="name" type="xs:string" />
<xs:element minOccurs="0" name="price" type="xs:string" />
<xs:element minOccurs="0" name="description" type="xs:string" />
<xs:element minOccurs="0" name="calories" type="xs:unsignedShort" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
-- SQL生成文件
DECLARE @MenuSchema XML
SET @MenuSchema = (
SELECT * FROM OPENROWSET
(BULK 'C:\Menu.xsd', SINGLE_CLOB)
AS xmlData)
--create the schema for using later in the XML type
CREATE XML SCHEMA COLLECTION MenuSchema AS @MenuSchema;
DECLARE @xmlData XML (MenuSchema)
SET @xmlData =
(SELECT
[name]
,price
,[description]
,calories
FROM
dbo.Menus [food]
FOR XML AUTO, ROOT ('breakfast_menu'), ELEMENTS)
SELECT @xmlData
如果您的 XSD 是 "attributes only" 或 "elements only",使用 SELECT ... FOR XML AUTO
有或没有 ELEMENTS
可能就足够了。
在大多数情况下 - 至少在我的工作中 - 我确实处理过混合 XML。
有 - AFAIK - 没有自动告诉 SQL 服务器:"Hey, here is a query, here is an XSD, go and prepare the fitting XML output!"
您必须创建一个您定义的 SELECT ... FOR XML PATH()
,输出适合您的 XSD。
然后您使用给定模式声明一个 XML 变量并尝试填充输出。这会起作用 - 或不会。那就是模式验证...
如果您找到自动创建它的方法,请post发表评论,谢谢!