我正在尝试使用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元素中,但我似乎仍然无处可去。有没有人看到这个错误?
答案 0 :(得分:0)
模式描述特定命名空间的XML词汇表。如果模式中没有targetNamespace属性,则它描述了无命名空间的词汇表。
您的实例文档具有命名空间声明xmlns =“http://www.eagleinvsys.com/2011/EagleML-2-0”,它将EagleML及其所有子/后代放入该命名空间,而不是targetNamespace架构。
在不了解EagleML规范的情况下,我不知道它是模式还是实例文档是错误的,但我可以告诉你它们不匹配。最简单的解决方法是将targetNamespace属性添加到xs:schema元素。