0

我有一个包含员工和信息的巨大 XML 文件,并且有一个问题。

XML 文件示例:

<Employees>
  <Employee>
    <EmployeeID>blah</EmployeeID>
    <FirstName>blah</FirstName>
    <LastName>blah</LastName>
    <MiddleName>blah</MiddleName>
    .......... and on
  </Employee>
    ........ and on
</Employees>

我的架构,到目前为止是这样的:

<?xml version="1.0" encoding="utf-8"?>

<xsd:element name="Employees" sql:relation="The_Employees">
    <xsd:complexType>
        <xsd:sequence>
            <xsd:element name="Employee">
                <xsd:element name="EmployeeID" sql:field="EmpNo" type="xsd:integer"/>
                <xsd:element name="FirstName" sql:field="FirstName">
                    <xsd:simpleType>
                        <xsd:restriction base="xsd:string">
                            <xsd:whiteSpace value="collapse"/>
                        </xsd:restriction>
                    </xsd:simpleType>
                </xsd:element>
               .......... and on
            </xsd:element>
        </xsd:sequence> 
    </xsd:complexType>
</xsd:element>

根据我的研究,根元素应该包含与您在数据库中的表的关系(为了隐私起见,本示例中的名称是“The_Employees”)所以,我建立了这个关系,并且还为每个建立了 sql:field列名,因为在大多数情况下,列名与 XML 元素标记不同。但是,我如何将每个单独<Employee>的标签与我的表相关联?此外,在验证 XML 时,它会引发此错误:

'Employee' 的内容必须匹配 (annotation?, (simpleType | complexType)?, (unique | key | keyref)*))。发现问题始于:元素。

似乎验证器认为我正在尝试将内容拆分为两个单独的表,因此需要对其进行注释,但我不是。有什么建议么?

仅供参考:这里的最终产品将是一个 VB.NET 程序,它使用 SQLXMLBulkLoad 将 XML 文件中的数据加载到新的 SQL 表中。

4

1 回答 1

0

好吧...修复很简单,我正在回答这个问题,以便将来有人可以参考它。如果您有一个根元素以及该根元素下的每个单独的父元素并且您正在使用 BulkLoad,那么您可以将根元素设置为 sql:is-constant = 1。这告诉架构根元素存在,但是忽略它。此外,上述架构已修改为:

<xsd:element name="Employees" sql:is-constant=1>
<xsd:complexType>
    <xsd:sequence>
        <xsd:element name="Employee" sql:relation="The_Employees">
          <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="EmployeeID" sql:field="EmpNo" type="xsd:integer"/>
            <xsd:element name="FirstName" sql:field="FirstName">
                <xsd:simpleType>
                    <xsd:restriction base="xsd:string">
                        <xsd:whiteSpace value="collapse"/>
                    </xsd:restriction>
                </xsd:simpleType>
            </xsd:element>
           .......... and on
          </xsd:sequence>
          </xsd:complexType>
        </xsd:element>
    </xsd:sequence> 
</xsd:complexType>

于 2012-07-19T16:31:13.337 回答