xsd架构不会正确处理文件xml

时间:2017-09-28 20:48:09

标签: xml xsd

我正在尝试使用sqlxml批量加载程序将一个巨大的xml文件加载到db。为此,我们必须更新模式文件。这是模式文件:

<?xml version="1.0" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
 xmlns:sql="urn:schemas-microsoft-com:mapping-schema"
            xmlns="http://www.eagleinvsys.com/2011/EagleML-2-0" >

  <xsd:element name="EagleML" 
               xsi:type="WarehouseTransactionMessage"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

                 sql:is-constant="1" >
    <xsd:complexType >
      <xsd:sequence>
  <!--<xsd:element name="header" sql:is-constant="1" />
  <xsd:element name="taskIdentifier" sql:is-constant="1" />-->
    <xsd:element name="warehouseTransaction" sql:is-constant="1">  
   <xsd:complexType >  
     <xsd:sequence>  
        <xsd:element name="warehouseOpenLot" sql:relation="TEST"  >  
          <xsd:complexType>
            <xsd:sequence>
              <xsd:element name="accountingBasis" type="xsd:string" />
              </xsd:sequence>
                <!--<xsd:attribute name="accruedLtdBase" type="xsd:decimal"  />
             <xsd:attribute name="accruedLtdLocal" type="xsd:decimal"  />-->
             <!--<xsd:attribute name="xrateLocalBase" type="xsd:decimal"  />-->
             <!--<xsd:attribute name="buySellFlag" type="xsd:normalizedString"  />
             <xsd:attribute name="closeTipsIncomeLtdBase" type="xsd:decimal"  />-->
         </xsd:complexType>  
        </xsd:element>  
     </xsd:sequence>  
    </xsd:complexType>  
  </xsd:element>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
</xsd:schema> 

这是xml文件

<EagleML
eaglemlVersion="2-0"
eaglemlType="WarehouseTransactionMessage"
eaglemlRevision="263"
xsi:schemaLocation="http://www.eagleinvsys.com/2011/EagleML-2-0 eagleml-main-2-0.xsd"
xsi:type="WarehouseTransactionMessage"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.eagleinvsys.com/2011/EagleML-2-0"
>
  <header>
    <messageId>B70JFJ55EE9AVXOX</messageId>
    <sentBy>http://www.eagleinvsys.com/</sentBy>
    <creationTimestamp>2017-09-25T08:25:54-04:00</creationTimestamp>
  </header>
  <taskIdentifier>
    <correlationId>JFJ55EE9TARJH009</correlationId>
    <sequenceNumber>1</sequenceNumber>
  </taskIdentifier>
     <warehouseTransaction>
      <header>
        <objectType>WarehouseOpenLot</objectType>
      </header>
      <warehouseOpenLot>
        <accountingBasis>USTAX</accountingBasis>
      </warehouseOpenLot>
      <warehouseOpenLot>
        <accountingBasis>TESTT</accountingBasis>
      </warehouseOpenLot>
    </warehouseTransaction>
  </EagleML>

如果关闭这些标签,它工作正常,但我没有这样做的奢侈:

xsi:schemaLocation="http://www.eagleinvsys.com/2011/EagleML-2-0 eagleml-main-2-0.xsd"
xsi:type="WarehouseTransactionMessage"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.eagleinvsys.com/2011/EagleML-2-0"

我在这里做错了什么?我已经尝试将这些标签移动到EagleML元素中,但我似乎仍然无处可去。有没有人看到这个错误?

1 个答案:

答案 0 :(得分:0)

模式描述特定命名空间的XML词汇表。如果模式中没有targetNamespace属性,则它描述了无命名空间的词汇表。

您的实例文档具有命名空间声明xmlns =“http://www.eagleinvsys.com/2011/EagleML-2-0”,它将EagleML及其所有子/后代放入该命名空间,而不是targetNamespace架构。

在不了解EagleML规范的情况下,我不知道它是模式还是实例文档是错误的,但我可以告诉你它们不匹配。最简单的解决方法是将targetNamespace属性添加到xs:schema元素。