SQL批量加载未使用其他命名空间加载XML

时间:2016-12-17 00:11:42

标签: xml xsd

我正在使用SQLXMLBULKLOADLib,而下面的工作没有额外的命名空间 xmlns="http://schemas.datacontract.org/2004/07/test.test"。如何使用额外的命名空间制作XSD和批量加载实用程序?

此XML在没有第二个名称空间xmlns的情况下正常工作:

<ROOT xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/test.test">  
  <Customers>  
    <CustomerID>1111</CustomerID>  
    <CompanyName>Sean Chai</CompanyName>  
    <City>NY</City>  
  </Customers>  
  <Customers>  
    <CustomerID>1112</CustomerID>  
    <CompanyName>Tom Johnston</CompanyName>  
     <City>LA</City>     
  </Customers> 
</ROOT>

架构文件:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema"
            xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
      <xsd:element name="ROOT" sql:is-constant="1" >
         <xsd:complexType>
          <xsd:sequence>
        <xsd:element name="Customers" sql:relation="Cust" >
          <xsd:complexType>
            <xsd:sequence>
              <xsd:element name="CustomerID"  type="xsd:integer" />
              <xsd:element name="CompanyName" type="xsd:string" />
              <xsd:element name="City"        type="xsd:string" />
           </xsd:sequence>
          </xsd:complexType>
        </xsd:element>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

如何在XSD中添加对其他命名空间的引用,以便xmlbulkload实用程序插入数据?

1 个答案:

答案 0 :(得分:2)

XML数据不会针对架构进行验证。

xml文档将所有元素放入命名空间&#39; http://schemas.datacontract.org/2004/07/test.test&#39;,但架构并不期望它们作为目标名称空间位于命名空间中,因此未设置。

您的基数也是&#39;客户&#39;是错误的(1-1),并且您没有设置schema属性elementFormDefault =&#34; qualified&#34;,如果没有此设置,XML文档中的每个元素都必须使用命名空间进行限定。

因此,为了使您的XML数据对模式有效,您的模式应如下所示。

enter image description here

<?xml version="1.0" encoding="utf-8" ?>
<!-- Created with Liquid XML 2017 Developer Bundle Edition (Trial) 15.0.0.6978 (https://www.liquid-technologies.com) -->
<xsd:schema xmlns:sql="urn:schemas-microsoft-com:mapping-schema"
            xmlns:i="http://www.w3.org/2001/XMLSchema-instance"
            elementFormDefault="qualified"
            targetNamespace="http://schemas.datacontract.org/2004/07/test.test"
            xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:element name="ROOT"
                 sql:is-constant="1">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="Customers"
                             minOccurs="0"
                             maxOccurs="unbounded"
                             sql:relation="Cust">
                    <xsd:complexType>
                        <xsd:sequence>
                            <xsd:element name="CustomerID"
                                         type="xsd:integer"/>
                            <xsd:element name="CompanyName"
                                         type="xsd:string"/>
                            <xsd:element name="City"
                                         type="xsd:string"/>
                        </xsd:sequence>
                    </xsd:complexType>
                </xsd:element>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>