我们正在寻找一种方法来解析大量符合严格模式的XML文件(特别是this one)。我们要做的就是在几个数据库表和XML文件之间创建一对一的数据映射,这样我们就可以在我们的Web服务软件包插入文件的表上设置一个触发器,然后自动解析它并插入我们定义的数据进入数据库。
在Microsoft的SQL Server和类似领域中实现这一目标的最佳方法是什么?
答案 0 :(得分:4)
您可以使用 SQLXML批量加载 4.0将XML文件批量加载到SQL Server表中。
SQLXML bulkload对象使用XML数据文件和Schema文件。
SCHEMA(XSD或XML)文件包含XML节点与数据库列名之间的映射信息。
set objBL = CreateObject("SQLXMLBulkLoad.SQLXMLBulkload.4.0")
objBL.ConnectionString = "Connection String"
objBL.ErrorLogFile = "c:\error.log"
objBL.Execute "SampleSchema.xml", "SampleXMLData.xml"
http://msdn.microsoft.com/en-us/library/ms171878.aspx
http://msdn.microsoft.com/en-us/library/ms171806.aspx
以下是示例数据文件和模式文件。
数据文件
<ROOT>
<Order OrderID="11" CustomerID="ALFKI">
<Product ProductID="11" ProductName="Chai" />
<Product ProductID="22" ProductName="Chang" />
</Order>
<Order OrderID="22" CustomerID="ANATR">
<Product ProductID="33" ProductName="Aniseed Syrup" />
<Product ProductID="44" ProductName="Gumbo Mix" />
</Order>
</ROOT>
架构定义
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<xsd:annotation>
<xsd:appinfo>
<sql:relationship name="OrderOD"
parent="Ord"
parent-key="OrderID"
child="OrderDetail"
child-key="OrderID" />
<sql:relationship name="ODProduct"
parent="OrderDetail"
parent-key="ProductID"
child="Product"
child-key="ProductID"
inverse="true"/>
</xsd:appinfo>
</xsd:annotation>
<xsd:element name="Order" sql:relation="Ord"
sql:key-fields="OrderID" >
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Product" sql:relation="Product"
sql:key-fields="ProductID"
sql:relationship="OrderOD ODProduct">
<xsd:complexType>
<xsd:attribute name="ProductID" type="xsd:int" />
<xsd:attribute name="ProductName" type="xsd:string" />
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="OrderID" type="xsd:integer" />
<xsd:attribute name="CustomerID" type="xsd:string" />
</xsd:complexType>
</xsd:element>
</xsd:schema>
答案 1 :(得分:1)
您可以考虑使用SSIS创建带有XML数据源的“ETL包”。然后执行包。在包中你可以指定模式,映射等.SSIS确实有“For Each File in Directory”容器等。
答案 2 :(得分:0)
听起来你想要做的就是编写一个XSL转换,将XML呈现为SQLServer批量导入工具可用的格式。 (我主要是Oracle,所以我不知道SQLServer端有什么可用)
另一个选择是将XML转换为SQL'insert'语句并将结果作为SQL脚本运行。
无论您选择哪种方法,考虑事务边界可能都很重要,这样输入中的错误或无效数据不会导致数据库中的不一致。