Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XML with inline XML Schema -> в нормальный XML / 5 сообщений из 5, страница 1 из 1
24.01.2007, 19:35
    #34280184
XML with inline XML Schema -> в нормальный XML
Добрый день.
Подскажите плиз как можно преобразовать подобное:
Есть:
Код: plaintext
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.
<?xml version="1.0" encoding="windows-1251"?>
<eu="xxx">
<scheme name="Scheme1" request="Set">
<data>
	<s>
		<d name="WorkParam">
			<f name="WorkDate" type="Date"/>
		</d>
		<d name="Work">
			<f name="CompanyId" type="String"/>
			<f name="AddressId" type="String"/>
			<f name="OrderNumber" type="String"/>
			<f name="DocumentNumber" type="String"/>
			<f name="DocumentDate" type="Date"/>
			<f name="WareId" type="String"/>
			<f name="Price" type="Currency"/>
			<f name="Quantity" type="Currency"/>
		</d>
	</s>
	<o>
		<d name="WorkParam">
			<r>
				<f> 20061130 </f>
			</r>
		</d>
		<d name="Work">
			<r>
				<f> 40055 </f>
				<f> 00000001 </f>
				<f>пмЯ- 0041602 </f>
				<f>пмЯ- 0041602 </f>
				<f> 20061130 </f>
				<f>я1</f>
				<f> 1 , 56 </f>
				<f> 5184 </f>
			</r>
			<r>
				<f> 40055 </f>
				<f> 00000001 </f>
				<f>пмЯ- 0041602 </f>
				<f>пмЯ- 0041602 </f>
				<f> 20061130 </f>
				<f>у2</f>
				<f> 5 , 12 </f>
				<f> 624 </f>
			</r>
		</d>
	</o>
</data>
</scheme>
</extdata>

а нужно получить это:
Код: plaintext
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.
<?xml version="1.0" encoding="windows-1251" ?>
<root>

<WorkParam>
	<WorkDate> 30 . 11 . 2006 </WorkDate>
</WorkParam>

<Work>
	<CompanyId> 40055 </CompanyId>
	<AddressId> 00000001 </AddressId>
	<OrderNumber>пмЯ- 0041602 </CRMOrderNumber>
	<DocumentNumber>пмЯ- 0041602 </DocumentNumber>
	<DocumentDate> 30 . 11 . 2006 </DocumentDate>
	<WareId>я1</WareId>
	<Price> 1 , 56 </Price>
	<Quantity> 5184 </Quantity>
</Work>
<Work>
	<CompanyId> 40055 </CompanyId>
	<AddressId> 00000001 </AddressId>
	<OrderNumber>пмЯ- 0041602 </CRMOrderNumber>
	<DocumentNumber>пмЯ- 0041602 </DocumentNumber>
	<DocumentDate> 30 . 11 . 2006 </DocumentDate>
	<WareId>у2</WareId>
	<Price> 5 , 12 </Price>
	<Quantity> 624 </Quantity>
</Work>
</root>

Конечная цель - загрузить первый файл в SQL базу, но я не знаю как это сделать, но знаю как загрузить второй файл (SQLXMLBulkLoad.SQLXMLBulkload).
Вот и вопрос - как преобразовать?
Было бы ещё неплохо проверить первый файл на валидность, но судя по этому:

http://]http://www.codeguru.com/Csharp/Csharp/cs_data/xml/article.php/c4235/
это не представялется возможным в автоматическом режиме.
Спасибо.
...
Рейтинг: 0 / 0
25.01.2007, 13:52
    #34281891
TiG
TiG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML with inline XML Schema -> в нормальный XML
Вроде так
Код: plaintext
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.
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                version="1.0">

<xsl:output method="xml"
            version="1.0"
            encoding="Windows-1251"
            indent="yes"/>

<xsl:key name="aNames" match="/extdata/scheme/data/s/d" use="@name"/>

<xsl:template match="/">

<root>
  <xsl:for-each select="/extdata/scheme/data/o/d/r">
    <xsl:variable name="nm" select="../@name"/>
    <xsl:element name="{$nm}">
      <xsl:for-each select="f">
        <xsl:variable name="pos" select="position()"/>
        <xsl:element name="{key('aNames', $nm)/f[$pos]/@name}">
          <xsl:value-of select="."/>
        </xsl:element>
      </xsl:for-each>
    </xsl:element>
  </xsl:for-each>
</root>

</xsl:template>

</xsl:stylesheet>
...
Рейтинг: 0 / 0
25.01.2007, 18:23
    #34283149
XML with inline XML Schema -> в нормальный XML
БОЛЬШОЕ спасибо !!!
...
Рейтинг: 0 / 0
25.01.2007, 20:33
    #34283472
XML with inline XML Schema -> в нормальный XML
всё-таки задам вопрос по поводу валидности по XDR схеме этого исходного файла:
Код: plaintext
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.
<?xml version="1.0" encoding="windows-1251"?>
<extdata user="018" xmlns="x-schema:1.xdr">
<scheme name="Scheme1" request="Set">
<data>
	<s>
		<d name="WorkParam">
			<f name="WorkDate" type="Date"/>
		</d>
		<d name="Work">
			<f name="CompanyId" type="String"/>
			<f name="AddressId" type="String"/>
			<f name="OrderNumber" type="String"/>
			<f name="DocumentNumber" type="String"/>
			<f name="DocumentDate" type="Date"/>
			<f name="WareId" type="String"/>
			<f name="Price" type="Currency"/>
			<f name="Quantity" type="Currency"/>
		</d>
	</s>
	<o>
		<d name="WorkParam">
			<r>
				<f> 20061130 </f>
			</r>
		</d>
		<d name="Work">
			<r>
				<f> 40055 </f>
				<f> 00000001 </f>
				<f>пмЯ- 0041602 </f>
				<f>пмЯ- 0041602 </f>
				<f> 20061130 </f>
				<f>я1</f>
				<f> 1 , 56 </f>
				<f> 5184 </f>
			</r>
			<r>
				<f> 40055 </f>
				<f> 00000001 </f>
				<f>пмЯ- 0041602 </f>
				<f>пмЯ- 0041602 </f>
				<f> 20061130 </f>
				<f>у2</f>
				<f> 5 , 12 </f>
				<f> 624 </f>
			</r>
		</d>
	</o>
</data>
</scheme>
</extdata>

С помощью Microsoft SQL Server XML View Mapper я создал XDR файл:
Код: plaintext
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.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
<?xml  version="1.0"  encoding="windows-1251" ?>
<!-- Generated by XMLMapper.exe XDR Publisher -->
<Schema xmlns:dt="urn:schemas-microsoft-com:datatypes" 
        xmlns:sql="urn:schemas-microsoft-com:xml-sql" 
        xmlns="urn:schemas-microsoft-com:xml-data" > 
 <ElementType name="extdata" 
              content="mixed" 
              order="many" > 
   <AttributeType name="user" > 
   </AttributeType>
   <attribute type="user" 
              required="yes" > 
   </attribute>
   <element type="scheme" 
            minOccurs="1" 
            maxOccurs="1" > 
   </element>
 </ElementType>
 <ElementType name="scheme" 
              content="mixed" 
              order="many" > 
   <AttributeType name="name" > 
   </AttributeType>
   <AttributeType name="request" > 
   </AttributeType>
   <attribute type="name" 
              required="yes" > 
   </attribute>
   <attribute type="request" 
              required="yes" > 
   </attribute>
   <element type="data" 
            minOccurs="1" 
            maxOccurs="1" > 
   </element>
 </ElementType>
 <ElementType name="data" 
              content="mixed" 
              order="many" > 
   <element type="s" 
            minOccurs="1" 
            maxOccurs="1" > 
   </element>
   <element type="o" 
            minOccurs="1" 
            maxOccurs="1" > 
   </element>
 </ElementType>
 <ElementType name="s" 
              content="mixed" 
              order="many" > 
   <element type="d" 
            minOccurs="1" 
            maxOccurs="*" > 
   </element>
 </ElementType>
 <ElementType name="d" 
              content="mixed" 
              order="many" > 
   <AttributeType name="name" > 
   </AttributeType>
   <attribute type="name" 
              required="yes" > 
   </attribute>
   <element type="f" 
            minOccurs="0" 
            maxOccurs="*" > 
   </element>
   <element type="r" 
            minOccurs="0" 
            maxOccurs="*" > 
   </element>
 </ElementType>
 <ElementType name="f" 
              content="mixed" 
              order="many" > 
   <AttributeType name="name" > 
   </AttributeType>
   <AttributeType name="type" > 
   </AttributeType>
   <attribute type="name" 
              required="no" > 
   </attribute>
   <attribute type="type" 
              required="no" > 
   </attribute>
 </ElementType>
 <ElementType name="o" 
              content="mixed" 
              order="many" > 
   <element type="d" 
            minOccurs="1" 
            maxOccurs="*" > 
   </element>
 </ElementType>
 <ElementType name="r" 
              content="mixed" 
              order="many" > 
   <element type="f" 
            minOccurs="1" 
            maxOccurs="*" > 
   </element>
 </ElementType>
</Schema>

Я хочу проверить, что б количество и типы значений совпадали с их описанием вверху.
Для проверки количества попробовал указать в XDR:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
.....................................
   <element type="f" 
            minOccurs="8" 
            maxOccurs="8" > 
   </element>
 </ElementType>
</Schema>

Но парсер ругается:
The value of attribute "minOccurs" should be "0" or "1".
The value of attribute "maxOccurs" should be "1" or "*".

Не подскажите как проверить на количество значений и их типы?
Спасибо.
...
Рейтинг: 0 / 0
26.01.2007, 13:57
    #34285309
TiG
TiG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML with inline XML Schema -> в нормальный XML
Сергей Гавриленко
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
.....................................
   <element type="f" 
            minOccurs="8" 
            maxOccurs="8" > 
   </element>
 </ElementType>
</Schema>

Но парсер ругается:
The value of attribute "minOccurs" should be "0" or "1".
The value of attribute "maxOccurs" should be "1" or "*".


Опустим то, допустимые значения те что парсер подсказывает. Но какие же у вас minOccurs="8" maxOccurs="8", если o/d[name="WorkParam"]/r этих f у вас 1, а в o/d[name="Work"]/r - 8 ? :)

Сергей Гавриленко
Не подскажите как проверить на количество значений и их типы?


С помощью XML Schema никак.
...
Рейтинг: 0 / 0
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XML with inline XML Schema -> в нормальный XML / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]