首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XML :choice SQLXMLBulkload

XML :choice SQLXMLBulkload
EN

Stack Overflow用户
提问于 2009-04-21 19:00:07
回答 1查看 596关注 0票数 1

我有一些XML文件需要批处理到SQL Server中。下面的Schema和XML部分概述了我遇到问题的一个领域。

代码语言:javascript
复制
<xs:complexType>
    <xs:sequence>
        <xs:choice maxOccurs="unbounded">
            <xs:element name="TextLine" type="xs:string" sql:field="AdvertLine" sql:relation="XmlAdvert" sql:relationship="XmlAdvert" />
            <xs:element name="BreakPoint" sql:is-constant="1" />
        </xs:choice>
    </xs:sequence>
</xs:complexType>

<Advert>
 <AdvertText>
  <TextLine>Isuzu 4 X 4TRUCKMAN</TextLine> 
  <BreakPoint /> 
  <TextLine>2.0TD, Red, 5 dr, 60,000 miles, MOT, 5 SEATER</TextLine> 
  <BreakPoint /> 
  <TextLine>£2500</TextLine>
  <BreakPoint /> 
  <TextLine>01234 567890</TextLine> 
 </AdvertText>
</Advert>

但是由于xs: SQLXMLBulkload不支持xs:choice,所以我想知道是否有另一种方式来表示没有xs:choice部分,xs: TextLine一旦命中第二个sequence就会无效。

EN

回答 1

Stack Overflow用户

发布于 2009-04-21 19:42:36

我不熟悉SQLXMLBulkload,但以下是我的想法:

我不确定相邻的TextLineBreakPoint元素之间是否有任何关系。假设没有,那么最简单的解决方案可能是使用XSLT来转换模式和数据,以消除对choice的需要。

注意,我在两个元素上都插入了maxOccurs="unbounded"。如果这不起作用,有一种替代方法应该可以起作用;请参见下面的内容。

代码语言:javascript
复制
<xs:complexType>
    <xs:sequence>
        <xs:element name="TextLine" type="xs:string" sql:field="AdvertLine" sql:relation="XmlAdvert" sql:relationship="XmlAdvert" maxOccurs="unbounded"/>
        <xs:element name="BreakPoint" sql:is-constant="1" maxOccurs="unbounded"/>
    </xs:sequence>
</xs:complexType>

等价的XML将是:

代码语言:javascript
复制
<Advert>
 <AdvertText>
  <TextLine>Isuzu 4 X 4TRUCKMAN</TextLine> 
  <TextLine>2.0TD, Red, 5 dr, 60,000 miles, MOT, 5 SEATER</TextLine> 
  <TextLine>£2500</TextLine>
  <TextLine>01234 567890</TextLine> 
  <BreakPoint /> 
  <BreakPoint /> 
  <BreakPoint /> 
 </AdvertText>
</Advert>

但据我所知,SQLXMLBulkload也不会喜欢这种安排。在这种情况下,仅基于您的示例XML,我打赌它会接受以下内容:

匹配的XML为:

代码语言:javascript
复制
<Advert>
 <AdvertText>
    <TextLines>
      <TextLine>Isuzu 4 X 4TRUCKMAN</TextLine> 
      <TextLine>2.0TD, Red, 5 dr, 60,000 miles, MOT, 5 SEATER</TextLine> 
      <TextLine>£2500</TextLine>
      <TextLine>01234 567890</TextLine>
    </TextLines> 
  <BreakPoints> 
      <BreakPoint /> 
      <BreakPoint /> 
      <BreakPoint /> 
  </BreakPoints> 
 </AdvertText>
</Advert>

这仍然没有解决如何编写所需的XSLT的问题,但这可能是一个开始。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/774091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档