Добрый день уважаемые Форумчане.
Передо мной была поставлена задача: recordset, сохранённый в xml файл, загрузить в определённую таблицу MSQL 2000. Прочитал довольно много статей по этому поводу, но так и не понял, как решить следующую проблему:
После сохранения recordset.Save('c:\table1.xml',adPersistXML), я получил файл следующего формата:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
<xml xmlns:s='uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882'
xmlns:dt='uuid:C2F41010-65B3-11d1-A29F-00AA00C14882'
xmlns:rs='urn:schemas-microsoft-com:rowset'
xmlns:z='#RowsetSchema'>
<s:Schema id='RowsetSchema'>
<s:ElementType name='row' content='eltOnly'>
<s:AttributeType name='IdValue' rs:number='1'>
<s:datatype dt:type='int' dt:maxLength='4' rs:precision='10' rs:fixedlength='true' rs:maybenull='false'/>
</s:AttributeType>
<s:AttributeType name='IdSeason' rs:number='2' rs:writeunknown='true'>
<s:datatype dt:type='int' dt:maxLength='4' rs:precision='10' rs:fixedlength='true' rs:maybenull='false'/>
</s:AttributeType>
<s:AttributeType name='IdType' rs:number='3' rs:writeunknown='true'>
<s:datatype dt:type='int' dt:maxLength='4' rs:precision='10' rs:fixedlength='true' rs:maybenull='false'/>
</s:AttributeType>
<s:AttributeType name='IdTM' rs:number='4' rs:nullable='true' rs:writeunknown='true'>
<s:datatype dt:type='int' dt:maxLength='4' rs:precision='10' rs:fixedlength='true'/>
</s:AttributeType>
<s:AttributeType name='IdSubTM' rs:number='5' rs:writeunknown='true'>
<s:datatype dt:type='int' dt:maxLength='4' rs:precision='10' rs:fixedlength='true' rs:maybenull='false'/>
</s:AttributeType>
<s:AttributeType name='IdGender' rs:number='6' rs:writeunknown='true'>
<s:datatype dt:type='int' dt:maxLength='4' rs:precision='10' rs:fixedlength='true' rs:maybenull='false'/>
</s:AttributeType>
<s:AttributeType name='IdCollection' rs:number='7' rs:writeunknown='true'>
<s:datatype dt:type='int' dt:maxLength='4' rs:precision='10' rs:fixedlength='true' rs:maybenull='false'/>
</s:AttributeType>
<s:AttributeType name='IdSite' rs:number='8' rs:writeunknown='true'>
<s:datatype dt:type='int' dt:maxLength='4' rs:precision='10' rs:fixedlength='true' rs:maybenull='false'/>
</s:AttributeType>
<s:AttributeType name='IdCTM' rs:number='9' rs:nullable='true' rs:writeunknown='true'>
<s:datatype dt:type='int' dt:maxLength='4' rs:precision='10' rs:fixedlength='true'/>
</s:AttributeType>
<s:AttributeType name='Model' rs:number='10' rs:nullable='true' rs:writeunknown='true'>
<s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='30'/>
</s:AttributeType>
<s:AttributeType name='Fabric' rs:number='11' rs:writeunknown='true'>
<s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='30' rs:maybenull='false'/>
</s:AttributeType>
<s:AttributeType name='CodeColor' rs:number='12' rs:nullable='true' rs:writeunknown='true'>
<s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='100'/>
</s:AttributeType>
<s:AttributeType name='NameColor' rs:number='13' rs:nullable='true' rs:writeunknown='true'>
<s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='50'/>
</s:AttributeType>
<s:AttributeType name='SizeRLC' rs:number='14' rs:nullable='true'>
<s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='62'/>
</s:AttributeType>
<s:extends type='rs:rowbase'/>
</s:ElementType>
</s:Schema>
<rs:data>
<z:row IdValue='1088719' IdSeason='4' IdType='1' IdTM='19' IdSubTM='1126' IdGender='1' IdCollection='2' IdSite='1'
IdCTM='19188' Model='148169' Fabric='WAAN0' CodeColor='6215' SizeRLC='36'/>
<z:row IdValue='1088720' IdSeason='4' IdType='1' IdTM='19' IdSubTM='1126' IdGender='1' IdCollection='2' IdSite='1'
IdCTM='19188' Model='148169' Fabric='WAAN0' CodeColor='6215' SizeRLC='36/5'/>
</rs:data>
</xml>
Где вначале описывается схема, а за ней идут данные.
Для загрузки данных использую метод SQLXMLBulkLoad.Execute, куда передаётся сам xml файл
и аннотированная схема, которая позволяет корректно загрузить данные в нужную таблицу.
Для простых xml документов(где не используются namespaces) шаблонная схема рисуется с пол тычка, но вот когда встречаются структуры вида:
1.
2.
3.
4.
5.
6.
<rs:data>
<z:row IdValue='1088719' IdSeason='4' IdType='1' IdTM='19' IdSubTM='1126' IdGender='1' IdCollection='2' IdSite='1'
IdCTM='19188' Model='148169' Fabric='WAAN0' CodeColor='6215' SizeRLC='36'/>
<z:row IdValue='1088720' IdSeason='4' IdType='1' IdTM='19' IdSubTM='1126' IdGender='1' IdCollection='2' IdSite='1'
IdCTM='19188' Model='148169' Fabric='WAAN0' CodeColor='6215' SizeRLC='36/5'/>
</rs:data>
моих познаний XML уже к сожалению не хватает. Может быть кто-нибудь подскажет, как нужно корректно подправить схему,чтобы можно было достучаться до данных
<rs:data> / <z:row>
Привожу пример аннотированной схемы:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:ms="urn:schemas-microsoft-com:mapping-schema">
<xsd:element name="data" ms:is-constant="1">
<xsd:complexType>
<xsd:sequence>
<xsd:element name ="row" ms:relation="test1">
<xsd:complexType>
<xsd:attribute name ="IdValue" ms:datatype="int" ms:field="IdValue" > </xsd:attribute >
<xsd:attribute name ="IdSeason" ms:datatype="int" ms:field="IdSeason" > </xsd:attribute >
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
которую я использовал для загрузки xml файла, вида:
1.
2.
3.
4.
5.
6.
<data>
<row IdValue='1088719' IdSeason='4' IdType='1' IdTM='19' IdSubTM='1126' IdGender='1' IdCollection='2' IdSite='1'
IdCTM='19188' Model='148169' Fabric='WAAN0' CodeColor='6215' SizeRLC='36'/>
<row IdValue='1088720' IdSeason='4' IdType='1' IdTM='19' IdSubTM='1126' IdGender='1' IdCollection='2' IdSite='1'
IdCTM='19188' Model='148169' Fabric='WAAN0' CodeColor='6215' SizeRLC='36/5'/>
</data>
Буду очень презнателен,если посдкажете как решить данную проблему.
Спасибо.