我有一个庞大的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>
从我的研究中,根元素应该包含与DB中的表的关系(为了隐私起见,本例中的名称是“The_Employees”)所以,我建立了这个关系,并且还创建了sql:表中每列的字段,因为在大多数情况下,列名称与XML元素标记不同。但是,我以何种方式将每个<Employee>
标记与我的表格相关联?此外,在验证XML时,它会抛出此错误:
'Employee'的内容必须匹配(注释?,(simpleType | complexType)?,(unique | key | keyref)*))。发现了一个问题 从:元素开始。
似乎验证器认为我正在尝试将内容拆分为两个单独的表,因此需要对其进行注释,但我不是。有什么建议吗?
仅供参考:这里的最终产品将是一个VB.NET程序,它使用SQLXMLBulkLoad将XML文件中的数据加载到新的SQL表中。
答案 0 :(得分: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>