1

我们有一个客户请求 XML 格式的数据。通常这不是必需的,因为我们通常只是交出 Access 数据库或 csv 文件,这就足够了。但是在这种情况下,我需要自动从十几个表中导出正确的 XML。

如果我可以在 SQL Server 2005 之外完成,那将是首选。但是我无法为我的生活找到一种方法来做到这一点。我可以转储原始 xml 数据,但这只是每行带有属性值的标签。我们需要一些代表表结构的东西。Access 有一个满足我们需求的 xml 格式的导出。但是我不确定如何实现自动化。它似乎无法通过 SQL 以任何方式使用,因此我试图追踪必要的代码以通过宏或 vbscript 导出 XML。

有什么建议么?

4

4 回答 4

1

如果您想要一个文档而不是一个片段,您可能需要一个两部分的解决方案。但是,这两个部分都可以在 SQL Server 中完成。

从 Tom 条目的评论中看起来就像您找到了 ELEMENTS 参数,因此您将字段作为子元素而不是属性获取。但是,您仍然会得到一个片段,因为您不会获得根节点。

有不同的方法可以处理这个问题。SQL Server提供了一种使用 XSLT 转换 XML 文档的方法,因此您可以创建 XSL 样式表以将查询结果包装在根元素中。您还可以添加客户架构所需的任何其他内容(假设他们有一个)。

如果您想将某些字段保留为属性并制作其他元素,您还可以使用 XSLT 移动这些字段,因此您最终可能会得到如下内容:

<customer id="204">
    <firstname>John</firstname>
    <lastname>Public</lastname>
</customer>
于 2008-09-24T17:42:53.883 回答
1

研究使用 FOR XML AUTO。根据您的要求,您可能需要使用 EXPLICIT。

举个简单的例子:

SELECT
    *
FROM
    Customers
INNER JOIN Orders ON Orders.CustID = Customers.CustID
FOR XML AUTO

这将生成一个嵌套的 XML 文档,其中包含客户内部的订单。然后你可以使用 SSIS 很容易地将它导出到一个文件中,我想。不过我自己没试过。

于 2008-09-23T19:41:13.047 回答
0

这里有一个宏的大纲,用于将数据从访问数据库导出到 xml 文件,这可能对您有用。

Const acExportTable = 0

Set objAccess = CreateObject("Access.Application")
objAccess.OpenCurrentDatabase "C:\Scripts\Test.mdb"

'Export the table "Inventory" to test.xml
objAccess.ExportXML acExportTable,"Inventory","c:\scripts\test.xml"
于 2008-09-23T19:39:25.127 回答
0

我能想到的最简单的方法是创建一个小应用程序来为你做这件事。您可以将其作为基本的 WinForm,然后使用 LinqToSql dbml 类来表示您的数据库。大多数时候,您可以使用 XmlSerializer 命名空间序列化这些对象。有时它比这更困难,具体取决于数据库的复杂性。查看这篇文章,了解有关 LinqToSql 和 Xml 序列化的一些详细信息: http ://www.west-wind.com/Weblog/posts/147218.aspx

希望有帮助。

于 2008-09-23T19:39:49.447 回答