Здравствуйте,
нужно преобразовать Xml-файл который делает ADO в xml-файл который понимает ClientDataSet(который от борланда)
Исходный XML-ADO
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.
59.
60.
61.
<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' rs:updatable='true'>
<s:AttributeType name='stor_id' rs:number='1' rs:writeunknown='true' rs:basecatalog='pubs' rs:basetable='sales'
rs:basecolumn='stor_id' rs:keycolumn='true'>
<s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='4' rs:fixedlength='true' rs:maybenull='false'/>
</s:AttributeType>
<s:AttributeType name='ord_num' rs:number='2' rs:writeunknown='true' rs:basecatalog='pubs' rs:basetable='sales'
rs:basecolumn='ord_num' rs:keycolumn='true'>
<s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='20' rs:maybenull='false'/>
</s:AttributeType>
<s:AttributeType name='ord_date' rs:number='3' rs:writeunknown='true' rs:basecatalog='pubs' rs:basetable='sales'
rs:basecolumn='ord_date'>
<s:datatype dt:type='dateTime' rs:dbtype='timestamp' dt:maxLength='16' rs:scale='3' rs:precision='23'
rs:fixedlength='true'
rs:maybenull='false'/>
</s:AttributeType>
<s:AttributeType name='qty' rs:number='4' rs:writeunknown='true' rs:basecatalog='pubs' rs:basetable='sales'
rs:basecolumn='qty'>
<s:datatype dt:type='i2' dt:maxLength='2' rs:precision='5' rs:fixedlength='true' rs:maybenull='false'/>
</s:AttributeType>
<s:AttributeType name='payterms' rs:number='5' rs:writeunknown='true' rs:basecatalog='pubs' rs:basetable='sales'
rs:basecolumn='payterms'>
<s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='12' rs:maybenull='false'/>
</s:AttributeType>
<s:AttributeType name='title_id' rs:number='6' rs:writeunknown='true' rs:basecatalog='pubs' rs:basetable='sales'
rs:basecolumn='title_id' rs:keycolumn='true'>
<s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='6' rs:maybenull='false'/>
</s:AttributeType>
<s:extends type='rs:rowbase'/>
</s:ElementType>
</s:Schema>
<rs:data>
<z:row stor_id='6380' ord_num='6871' ord_date='1994-09-14T00:00:00' qty='5' payterms='Net 60' title_id='BU1032'/>
<z:row stor_id='6380' ord_num='722a' ord_date='1994-09-13T00:00:00' qty='3' payterms='Net 60' title_id='PS2091'/>
<z:row stor_id='7066' ord_num='A2976' ord_date='1993-05-24T00:00:00' qty='50' payterms='Net 30' title_id='PC8888'/>
<z:row stor_id='7066' ord_num='QA7442.3' ord_date='1994-09-13T00:00:00' qty='75' payterms='ON invoice'
title_id='PS2091'/>
<z:row stor_id='7067' ord_num='D4482' ord_date='1994-09-14T00:00:00' qty='10' payterms='Net 60' title_id='PS2091'/>
<z:row stor_id='7067' ord_num='P2121' ord_date='1992-06-15T00:00:00' qty='40' payterms='Net 30' title_id='TC3218'/>
<z:row stor_id='7067' ord_num='P2121' ord_date='1992-06-15T00:00:00' qty='20' payterms='Net 30' title_id='TC4203'/>
<z:row stor_id='7067' ord_num='P2121' ord_date='1992-06-15T00:00:00' qty='20' payterms='Net 30' title_id='TC7777'/>
<z:row stor_id='7131' ord_num='N914008' ord_date='1994-09-14T00:00:00' qty='20' payterms='Net 30' title_id='PS2091'/>
<z:row stor_id='7131' ord_num='N914014' ord_date='1994-09-14T00:00:00' qty='25' payterms='Net 30' title_id='MC3021'/>
<z:row stor_id='7131' ord_num='P3087a' ord_date='1993-05-29T00:00:00' qty='20' payterms='Net 60' title_id='PS1372'/>
<z:row stor_id='7131' ord_num='P3087a' ord_date='1993-05-29T00:00:00' qty='25' payterms='Net 60' title_id='PS2106'/>
<z:row stor_id='7131' ord_num='P3087a' ord_date='1993-05-29T00:00:00' qty='15' payterms='Net 60' title_id='PS3333'/>
<z:row stor_id='7131' ord_num='P3087a' ord_date='1993-05-29T00:00:00' qty='25' payterms='Net 60' title_id='PS7777'/>
<z:row stor_id='7896' ord_num='QQ2299' ord_date='1993-10-28T00:00:00' qty='15' payterms='Net 60' title_id='BU7832'/>
<z:row stor_id='7896' ord_num='TQ456' ord_date='1993-12-12T00:00:00' qty='10' payterms='Net 60' title_id='MC2222'/>
<z:row stor_id='7896' ord_num='X999' ord_date='1993-02-21T00:00:00' qty='35' payterms='ON invoice' title_id='BU2075'/>
<z:row stor_id='8042' ord_num='423LL922' ord_date='1994-09-14T00:00:00' qty='15' payterms='ON invoice'
title_id='MC3021'/>
<z:row stor_id='8042' ord_num='423LL930' ord_date='1994-09-14T00:00:00' qty='10' payterms='ON invoice'
title_id='BU1032'/>
<z:row stor_id='8042' ord_num='P723' ord_date='1993-03-11T00:00:00' qty='25' payterms='Net 30' title_id='BU1111'/>
<z:row stor_id='8042' ord_num='QA879.1' ord_date='1993-05-22T00:00:00' qty='30' payterms='Net 30' title_id='PC1035'/>
</rs:data>
</xml>
Трансформация XSL-ADO2CDS
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.
59.
<?xml version="1.0" encoding="windows-1251"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
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'>
<xsl:output method="xml" encoding="windows-1251" omit-xml-declaration="no" indent="yes" media-type="text/xml"/>
<xsl:template match="/">
<DATAPACKET Version="2.0">
<METADATA>
<FIELDS>
<xsl:for-each select="xml/s:Schema/s:ElementType/s:AttributeType">
<FIELD>
<xsl:attribute name="attrname">
<xsl:value-of select="./@name"/>
</xsl:attribute>
<xsl:choose>
<xsl:when test="./s:datatype/@dt:type = 'string'">
<xsl:attribute name="fieldtype">
<xsl:value-of select="./s:datatype/@dt:type"/>
</xsl:attribute>
<xsl:attribute name="WIDTH">
<xsl:value-of select="./s:datatype/@dt:maxLength"/>
</xsl:attribute>
</xsl:when>
<xsl:when test="./s:datatype/@dt:type = 'float'">
<xsl:attribute name="fieldtype">
r8
</xsl:attribute>
</xsl:when>
<xsl:otherwise>
<xsl:attribute name="fieldtype">
<xsl:value-of select="./s:datatype/@dt:type"/>
</xsl:attribute>
</xsl:otherwise>
</xsl:choose>
</FIELD>
</xsl:for-each>
</FIELDS>
<PARAMS/>
</METADATA>
<ROWDATA>
<!-- <xsl:for-each select="xml/rs:data/z:row">-->
<ROW>
<xsl:template match="*">
<xsl:copy>
<xsl:apply-templates select="@*" />
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<!-- <xsl:copy>
<xsl:apply-templates select="./@*"/>
</xsl:copy> -->
</ROW>
<!-- </xsl:for-each> -->
</ROWDATA>
</DATAPACKET>
</xsl:template>
</xsl:stylesheet>
Что должно получится XML-CDS
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.
<?xml version="1.0" standalone="yes" ?>
- <DATAPACKET Version="2.0">
- <METADATA>
- <FIELDS>
<FIELD attrname="stor_id" fieldtype="string" SUBTYPE="FixedChar" WIDTH="4" />
<FIELD attrname="ord_num" fieldtype="string" WIDTH="20" />
<FIELD attrname="ord_date" fieldtype="dateTime" />
<FIELD attrname="qty" fieldtype="i2" />
<FIELD attrname="payterms" fieldtype="string" WIDTH="12" />
<FIELD attrname="title_id" fieldtype="string" WIDTH="6" />
</FIELDS>
<PARAMS />
</METADATA>
- <ROWDATA>
<ROW stor_id="6380" ord_num="6871" ord_date="19940914" qty="5" payterms="Net 60" title_id="BU1032" />
<ROW stor_id="6380" ord_num="722a" ord_date="19940913" qty="3" payterms="Net 60" title_id="PS2091" />
<ROW stor_id="7066" ord_num="A2976" ord_date="19930524" qty="50" payterms="Net 30" title_id="PC8888" />
<ROW stor_id="7066" ord_num="QA7442.3" ord_date="19940913" qty="75" payterms="ON invoice" title_id="PS2091" />
<ROW stor_id="7067" ord_num="D4482" ord_date="19940914" qty="10" payterms="Net 60" title_id="PS2091" />
<ROW stor_id="7067" ord_num="P2121" ord_date="19920615" qty="40" payterms="Net 30" title_id="TC3218" />
<ROW stor_id="7067" ord_num="P2121" ord_date="19920615" qty="20" payterms="Net 30" title_id="TC4203" />
<ROW stor_id="7067" ord_num="P2121" ord_date="19920615" qty="20" payterms="Net 30" title_id="TC7777" />
<ROW stor_id="7131" ord_num="N914008" ord_date="19940914" qty="20" payterms="Net 30" title_id="PS2091" />
<ROW stor_id="7131" ord_num="N914014" ord_date="19940914" qty="25" payterms="Net 30" title_id="MC3021" />
<ROW stor_id="7131" ord_num="P3087a" ord_date="19930529" qty="20" payterms="Net 60" title_id="PS1372" />
<ROW stor_id="7131" ord_num="P3087a" ord_date="19930529" qty="25" payterms="Net 60" title_id="PS2106" />
<ROW stor_id="7131" ord_num="P3087a" ord_date="19930529" qty="15" payterms="Net 60" title_id="PS3333" />
<ROW stor_id="7131" ord_num="P3087a" ord_date="19930529" qty="25" payterms="Net 60" title_id="PS7777" />
<ROW stor_id="7896" ord_num="QQ2299" ord_date="19931028" qty="15" payterms="Net 60" title_id="BU7832" />
<ROW stor_id="7896" ord_num="TQ456" ord_date="19931212" qty="10" payterms="Net 60" title_id="MC2222" />
<ROW stor_id="7896" ord_num="X999" ord_date="19930221" qty="35" payterms="ON invoice" title_id="BU2075" />
<ROW stor_id="8042" ord_num="423LL922" ord_date="19940914" qty="15" payterms="ON invoice" title_id="MC3021" />
<ROW stor_id="8042" ord_num="423LL930" ord_date="19940914" qty="10" payterms="ON invoice" title_id="BU1032" />
<ROW stor_id="8042" ord_num="P723" ord_date="19930311" qty="25" payterms="Net 30" title_id="BU1111" />
<ROW stor_id="8042" ord_num="QA879.1" ord_date="19930522" qty="30" payterms="Net 30" title_id="PC1035" />
</ROWDATA>
</DATAPACKET>
Что получается
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.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
<?xml version="1.0" encoding="UTF-16"?>
<DATAPACKET Version="2.0" 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">
<METADATA>
<FIELDS>
<FIELD attrname="stor_id" fieldtype="string" WIDTH="4"/>
<FIELD attrname="ord_num" fieldtype="string" WIDTH="20"/>
<FIELD attrname="ord_date" fieldtype="dateTime"/>
<FIELD attrname="qty" fieldtype="i2"/>
<FIELD attrname="payterms" fieldtype="string" WIDTH="12"/>
<FIELD attrname="title_id" fieldtype="string" WIDTH="6"/>
</FIELDS>
<PARAMS/>
</METADATA>
<ROWDATA>
<ROW>
<z:row> 638068711994 - 09 -14T00: 00 :005Net 60BU1032</z:row>
</ROW>
<ROW>
<z:row>6380722a1994- 09 -13T00: 00 :003Net 60PS2091</z:row>
</ROW>
<ROW>
<z:row>7066A29761993- 05 -24T00: 00 :0050Net 30PC8888</z:row>
</ROW>
<ROW>
<z:row>7066QA7442. 31994 - 09 -13T00: 00 :0075ON invoicePS2091</z:row>
</ROW>
<ROW>
<z:row>7067D44821994- 09 -14T00: 00 :0010Net 60PS2091</z:row>
</ROW>
<ROW>
<z:row>7067P21211992- 06 -15T00: 00 :0040Net 30TC3218</z:row>
</ROW>
<ROW>
<z:row>7067P21211992- 06 -15T00: 00 :0020Net 30TC4203</z:row>
</ROW>
<ROW>
<z:row>7067P21211992- 06 -15T00: 00 :0020Net 30TC7777</z:row>
</ROW>
<ROW>
<z:row>7131N9140081994- 09 -14T00: 00 :0020Net 30PS2091</z:row>
</ROW>
<ROW>
<z:row>7131N9140141994- 09 -14T00: 00 :0025Net 30MC3021</z:row>
</ROW>
<ROW>
<z:row>7131P3087a1993- 05 -29T00: 00 :0020Net 60PS1372</z:row>
</ROW>
<ROW>
<z:row>7131P3087a1993- 05 -29T00: 00 :0025Net 60PS2106</z:row>
</ROW>
<ROW>
<z:row>7131P3087a1993- 05 -29T00: 00 :0015Net 60PS3333</z:row>
</ROW>
<ROW>
<z:row>7131P3087a1993- 05 -29T00: 00 :0025Net 60PS7777</z:row>
</ROW>
<ROW>
<z:row>7896QQ22991993- 10 -28T00: 00 :0015Net 60BU7832</z:row>
</ROW>
<ROW>
<z:row>7896TQ4561993- 12 -12T00: 00 :0010Net 60MC2222</z:row>
</ROW>
<ROW>
<z:row>7896X9991993- 02 -21T00: 00 :0035ON invoiceBU2075</z:row>
</ROW>
<ROW>
<z:row>8042423LL9221994- 09 -14T00: 00 :0015ON invoiceMC3021</z:row>
</ROW>
<ROW>
<z:row>8042423LL9301994- 09 -14T00: 00 :0010ON invoiceBU1032</z:row>
</ROW>
<ROW>
<z:row>8042P7231993- 03 -11T00: 00 :0025Net 30BU1111</z:row>
</ROW>
<ROW>
<z:row>8042QA879. 11993 - 05 -22T00: 00 :0030Net 30PC1035</z:row>
</ROW>
</ROWDATA>
</DATAPACKET>
Скрипт трансформирования
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Set objXML = CreateObject("Msxml2.DOMDocument")
Set xsl = Createobject("MSXML2.DOMDocument")
Set XML = Createobject("MSXML2.DOMDocument")
' Загружаем полученный XML
XML.Async = False
XML.load("C:\transform\ADO_pubs.xml")
' Загружаем схему преобразования для получения данных из XML
xsl.Async = False
xsl.load("C:\transform\ADONET2CDS.xsl")
' Проводим трансформацию и получаем нужный XML
transformXML = XML.transformNode(xsl)
objXML.loadXML(transformXML)
objXML.save("C:\transform\rezult.xml")
Set objXML = Nothing
Set xsl = Nothing
Set XML = Nothing
MsgBox(transformXML)
Вообщем не получается скопировать атрибуты с данными из исходного ADO-XML в результат.
У меня не получилось ни узнать имя атрибута, что-бы добавить его в результат, ни просто скопировать набор атрибутов со
значениями.
Или есть ещё какой-то путь преобразования?
Posted via ActualForum NNTP Server 1.4