2016-02-04 126 views
2

我们有一个XSD,并且我们想要一种根据XSD以xml格式导出数据的方式。数据现在在SQL数据库中,但我们没有问题使用mysql或其他数据库格式。我们需要映射XSD和表格数据以便以xml格式导出它们。如何将数据从数据库导出到xml根据XSD

+0

嗨亚历克斯,有一个很好的教程:http://wiki.lessthandot.com/index.php/Table_to_XML_using_SCHEMA_from_XSD – Backtrack

回答

4

得到与早餐菜单

CREATE TABLE Menus 
(name varchar(255) 
,price numeric(12,4) 
,description varchar(1500) 
,calories int); 

--insert用来定义导出一些测试数据

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架构这个from here

- 创建测试表

<?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 
+0

这将只在非常简单的情况下工作,但我投了它,因为它显示了一些原则... – Shnugo

4

如果您的XSD是“只属性”或“仅元素”可能是足够使用SELECT ... FOR XML AUTO带或不带ELEMENTS

在大多数情况下 - 至少在我的工作中 - 我已经处理混合XML。

有 - AFAIK - 没有自动的方式告诉SQL Server:“嘿,这里是一个查询,这里是一个XSD,去准备拟合的XML输出!

您必须创建一个SELECT ... FOR XML PATH(),您可以通过这种方式定义输出适合您的XSD。

然后,您使用给定的模式声明XML变量并尝试填充输出。这将起作用 - 或不。这是模式验证...

如果您发现自动创建此方法,请发表评论,thx!

+1

是的,我同意这一点。我也使用相同的。使用XML路径导出并使用C#编写的应用程序进行验证。但OP没有添加太多的细节,所以我做了如下的答案。 +1的解释; – Backtrack

相关问题