XML XSD架构 - 使用Attribute导入XML SQLXMLBulkLoad

时间:2014-03-15 19:49:02

标签: xml sql-server-2005 import xsd sqlxml

我正在尝试将大型XML文件导入到我的SQL Server 2005中。

让我们看一下我的XML文件片段:

<Details>
    <Title>I am a title</Title>
    <Manufacturer ....
</Details>

我的xsd看起来像:

<xs:element name="Details" sql:is-constant="1">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="Title" sql:field="Title" type="xs:string" />
            <xs:element name="Manufacturer" sql:field="Manufacturer" type="xs:string" />
            ...
         </xs:sequence>
     </xs:complexType>
</xs:element>

工作正常,但现在我想告诉你xml的奇怪部分:

<Images>
    <Img Name="Adv">
        <URL>TARGET URL</URL>
        <Width>a width ....</Width>
    </Img>
    <Img Name="Img30">
        <URL>a URL again</URL>
        <Width>...</Width>
    </Img>
    <Img Name="Img60">
        <URL>......</URL>
        <Width>..</Width>
</Images>

如何从(TARGET URL)获取值Images > Img.Adv > URL

如何考虑属性(Name="Adv")

我知道了,请帮忙!

1 个答案:

答案 0 :(得分:0)

我假设您想知道如何声明使用XSD显示的XML片段。假设<xs:element>元素接受URL(未经验证),URI接受任何小数(浮点),此Width块将验证您发布的示例,并且您可以拥有无​​限量的Img子元素,但至少有一个:

<xs:element name="Images">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="Img" maxOccurs="unbounded">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="URL" type="xs:anyURI" />
                        <xs:element name="Width" type="xs:decimal"/>
                    </xs:sequence>
                    <xs:attribute name="Name" type="xs:string" />
                </xs:complexType>
            </xs:element>
        </xs:sequence>

    </xs:complexType>
</xs:element>

您可以将Width类型更改为xs:integer以将宽度限制为整数,如果它包含单位(xs:string)等文本,则可以更改为200px。您还可以添加限制以验证URL并检查它是否具有有效的图像扩展名,是否以http等开头,以及限制宽度的限制。

您没有指定嵌套Image元素的位置。假设它位于现有标签之后的Details内,您可以添加如下参考:

<xs:element name="Details">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="Title" type="xs:string" />
            <xs:element name="Manufacturer" type="xs:string" />
            <xs:element ref="Images" />
        </xs:sequence>
    </xs:complexType>
</xs:element>

或者在那里粘贴整个xs:element定义。