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

问题描述:

我想使用sqlxml批量加载器将大​​型xml文件加载到db。为了做到这一点,我们必须更新模式文件。下面是schema文件:xsd架构不会正确处理文件xml

<?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元素中,但我似乎仍然无处可寻。有没有人看到这个错误?

模式描述特定名称空间的XML词汇表。如果模式中没有targetNamespace属性,它将描述一个没有名称空间的词汇表。

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

不知道有关EagleML规范的任何信息,我不知道它是模式还是实例文档是错误的,但我可以告诉你它们不匹配。最简单的解决方法是将一个targetNamespace属性添加到xs:schema元素。