如何根据XSD将数据从数据库导出到xml

Ale*_*tas 4 xml sql xsd

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

bac*_*ack 7

从这里得到这个

- 创建与早餐菜单相关的测试表

CREATE TABLE Menus
(name varchar(255)
,price numeric(12,4)
,description varchar(1500)
,calories int);
Run Code Online (Sandbox Code Playgroud)

- 插入一些测试数据

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);
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

- 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
Run Code Online (Sandbox Code Playgroud)


Shn*_*ugo 5

如果您的 XSD 是“仅属性”或“仅元素”,那么使用SELECT ... FOR XML AUTO或不使用ELEMENTS.

在大多数情况下——至少在我的工作中——我确实处理过混合 XML。

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

你必须创建一个SELECT ... FOR XML PATH()你定义的方式,输出适合你的 XSD。

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

如果您找到自动创建此功能的方法,请发表评论,谢谢!