powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XML with inline XML Schema -> в нормальный XML
5 сообщений из 5, страница 1 из 1
XML with inline XML Schema -> в нормальный XML
    #34280184
Добрый день.
Подскажите плиз как можно преобразовать подобное:
Есть:
Код: 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
XML with inline XML Schema -> в нормальный XML
    #34281891
TiG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вроде так
Код: 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
XML with inline XML Schema -> в нормальный XML
    #34283149
БОЛЬШОЕ спасибо !!!
...
Рейтинг: 0 / 0
XML with inline XML Schema -> в нормальный XML
    #34283472
всё-таки задам вопрос по поводу валидности по 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
XML with inline XML Schema -> в нормальный XML
    #34285309
TiG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Гавриленко
Код: 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
5 сообщений из 5, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XML with inline XML Schema -> в нормальный XML
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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