SQLXMLBulk按属性和节点加载标识

时间:2016-04-20 10:00:33

标签: xml xsd

只是想知道我是否可以尝试编写架构 我有以下节点

>   <Persons>
>         <Person system="FirstName">Joe</category>
>         <Person system="Surname">Doe</category>
>         <Person system="Phone">123456</category>
>         <Person system="Phone">789123</category>
>       </Persons>

我试过这个

<xsd:element Name="Persons" sql:isconstant="1">                                     
  <xsd:complexType>
    <xsd:sequence>
      <xsd:element maxOccurs="unbounded" Name="Person">
        <xsd:complexType>
          <xsd:simpleContent>
            <xsd:extension base="xsd:string">
              <xsd:attribute Name="FirstName" 
                             Type="xsd:string"  
                             sql:field="PersonsFirstName" />
            </xsd:extension>
          </xsd:simpleContent>
        </xsd:complexType>
      </xsd:element>
    </xsd:sequence>
  </xsd:complexType>
</xsd:element>  

当我运行时,我收到以下错误

  

名称包含无效字符。

非常感谢任何帮助或指示。提前谢谢。

1 个答案:

答案 0 :(得分:0)

我没有看到您显示的片段中包含无效字符的任何名称,这表明

  • 问题出在您输入的其他地方

  • 您的架构处理器因nametype拼写错误NameType(XML区分大小写,是吗?)及其诊断消息而感到困惑。 ..没有你想象的那么有用。

[稍后添加]您可能会发现在具有XSD结构内置知识的编辑器中处理模式文档会很有帮助;这有助于防止简单的错误。如果您提供一个允许重现问题的最小但完整的示例,将更容易为您提供帮助。 (当我在模式文档中嵌入元素声明并更正@name和@type的拼写时,我没有得到关于xsd:attribute的任何错误。没有可重现的示例,Stack Overflow的Q / A格式退化一个二十个问题的游戏,这在现场直播时会更有趣。)

更仔细地查看您的架构片段我注意到您定义的XML结构与输入的结构不匹配:您的架构定义了一个名为FirstName的属性,但输入你show没有这样的属性;输入有一个无用的名为System的属性,可以将FirstName作为值。

如果你想匹配你显示的输入,你需要声明类似下面的形式(我留下sql的管理:*注释给你;我已经扁平化了结构,因为深嵌套似乎这么多人更难理解架构,包括我):

<xsd:element name="Persons">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:element ref="Person" maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:complexType>
</xsd:element>

<xsd:element name="Person">
  <xsd:complexType>
    <xsd:simpleContent>
      <xsd:extension base="xsd:string">
        <xsd:attribute name="System" type="xsd:NCName"/>
      </xsd:extension>
    </xsd:simpleContent>
  </xsd:complexType>
</xsd:element>

另一方面,如果你真的需要模式来指定如何将每个元素映射到一个列中(我猜测你的sql:field属性正在做什么),你会发现它更容易如果你使XML元素类型名称更明确地说明它们是什么。如果XML看起来像这样:

<Persons>
  <Person>
    <FirstName>Joe</FirstName>
    <Surname>Doe</Surname>
    <Phone>123456</Phone>
    <Phone>789123</Phone>
  </Person>
  <!--* ... other Person records here *-->
</Persons>

然后将每个字段映射到不同的SQL字段会更简单。

但是我不熟悉你的架构中的注释,我可能误解了它们的功能。