1

SQLServerにバッチ処理する必要のあるXMLファイルがいくつかあります。次のスキーマとXMLのセクションでは、問題が発生している領域の概要を説明します。

<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:choiceはSQLXMLBulkloadでサポートされていないため、xs:choiceセクションなしでこれを表す別の方法があるかどうか疑問に思いました。xs:sequenceは2番目のTextLineに到達するとすぐに無効になります。

4

1 に答える 1

0

私は SQLXMLBulkload に精通していませんが、私の考えは次のとおりです。

TextLine隣接する要素と要素の間に関係があるかどうかはわかりませんBreakPoint。存在しないと仮定すると、最も簡単な解決策は、XSLT を使用してスキーマとデータを変換し、choice.

maxOccurs="unbounded"両方の要素に挿入したことに注意してください。それがうまくいかない場合は、うまくいくはずの別のアプローチがあります。下記参照。

<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 は次のようになります。

<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 は次のとおりです。

<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 をどのように記述するかという問題はまだ未解決のままですが、おそらくそれが出発点です。

于 2009-04-21T19:42:36.403 に答える