Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Проблема с XML Data Source (SSIS) / 17 сообщений из 17, страница 1 из 1
29.01.2020, 14:47
    #39919953
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с XML Data Source (SSIS)
Имеем источник XML Data Source c валидацией по схеме.

схема XSD
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
	<xs:element name="LIST_HEADER">
		<xs:complexType>
			<xs:sequence>
				<xs:element type="xs:date" name="DATE" maxOccurs="1" minOccurs="1"/>
...
					<xs:complexType>
...


файл XML
Код: xml
1.
2.
3.
4.
5.
6.
<?xml version="1.0" encoding="WINDOWS-1251" ?>
<LIST_HEADER>
<DATE>2019-05-31</DATE>
...
<HEADER>
...



В "Input Output Properties" не вижу выхода LIST_HEADER!
Если сделать
Код: xml
1.
<xs:element name="LIST_HEADER" minOccurs="1">


То на выходе HEADER появляется DATA (?), но сам компонент начинает ругаться, типа нельзя так делать.
"minOccurs cannot be present"
Что я делаю не так?

Задача - вытащить дату из компонента.
...
Рейтинг: 0 / 0
29.01.2020, 15:02
    #39919966
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с XML Data Source (SSIS)
Поправка

То на выходе HEADER появляется DATA (?), но сам компонент начинает ругаться, типа нельзя так делать.
"minOccurs cannot be present"

это сам накосячил.

Но проблема осталась, не могу вытащить поле DATE.
...
Рейтинг: 0 / 0
29.01.2020, 16:01
    #39920039
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с XML Data Source (SSIS)
SQL2008,

покажите целостный документ, а не нарезку.
...
Рейтинг: 0 / 0
29.01.2020, 16:10
    #39920048
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с XML Data Source (SSIS)
Владислав Колосов, документ очень большой.
И, кроме того, конфиденциальный.
Не читается только LIST_HEADER, все вложенные узла и валидируются и считываются без проблем.
...
Рейтинг: 0 / 0
29.01.2020, 16:26
    #39920064
Borodat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с XML Data Source (SSIS)
SQL2008,
А сгенерить xsd средствами ssis?
...
Рейтинг: 0 / 0
29.01.2020, 16:37
    #39920067
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с XML Data Source (SSIS)
Borodat
SQL2008,
А сгенерить xsd средствами ssis?

Пока не вариант. Формировал, но там придется руками править длину полей и мапинг весь слетит.
Если ничего не останется, то вернусь к этому.
...
Рейтинг: 0 / 0
29.01.2020, 16:44
    #39920076
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с XML Data Source (SSIS)
Обезличил данные.

Модератор: Используйте тег spoiler
Схема
Код: xml
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.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
	<xs:element name="LIST_HEADER">
		<xs:complexType>
			<xs:sequence>
				<xs:element type="xs:string" name="TITLE" maxOccurs="1" minOccurs="1">
				</xs:element>
				<xs:element type="xs:string" name="ORG_NAME" maxOccurs="1" minOccurs="1">
				</xs:element>
				<xs:element type="xs:date" name="DATE" maxOccurs="1" minOccurs="1">
				</xs:element>
				<xs:element type="xs:string" name="RATE" maxOccurs="1" minOccurs="1">
				</xs:element>
				<xs:element name="HEADER" maxOccurs="1" minOccurs="1">
					<xs:complexType>
						<xs:sequence>
							<xs:element name="LIST_SECTIONS" maxOccurs="1" minOccurs="1">
								<xs:complexType>
									<xs:sequence>
										<xs:element name="SECTION" maxOccurs="unbounded" minOccurs="0">
											<xs:complexType>
												<xs:sequence>
													<xs:element type="xs:integer" name="PPL_ID" maxOccurs="1" minOccurs="1">
														
													</xs:element>
													<xs:element name="PPL_REG_NUMBER" maxOccurs="1" minOccurs="1">
														 
														<xs:simpleType>
															<xs:restriction base="xs:string">
																<xs:maxLength value="100"/>
															</xs:restriction>
														</xs:simpleType>													
													</xs:element>
													<xs:element type="xs:date" name="PPL_REG_DATE" maxOccurs="1" minOccurs="1">
														
													</xs:element>
													<xs:element type="xs:decimal" name="PPL_AMOUNT" maxOccurs="1" minOccurs="1">
														 
													</xs:element>
													<xs:element name="PPL_DB_CR" maxOccurs="1" minOccurs="0">
														
														<xs:simpleType>
															<xs:restriction base="xs:string">
																<xs:maxLength value="50"/>
															</xs:restriction>
														</xs:simpleType>													
													</xs:element>                          
													<xs:element type="xs:string" name="PPL_SND_ACCOUNT" maxOccurs="1" minOccurs="0">
														 
													</xs:element>
													<xs:element name="PPL_SND_INN" maxOccurs="1" minOccurs="0">
														
														<xs:simpleType>
															<xs:restriction base="xs:string">
																<xs:maxLength value="100"/>
															</xs:restriction>
														</xs:simpleType>													
													</xs:element>
													<xs:element name="PPL_SND_CPP" maxOccurs="1" minOccurs="0">
														
														<xs:simpleType>
															<xs:restriction base="xs:string">
																<xs:maxLength value="100"/>
															</xs:restriction>
														</xs:simpleType>													
													</xs:element>
													<xs:element name="PPL_SND_NAME" maxOccurs="1" minOccurs="0">
														
														<xs:simpleType>
															<xs:restriction base="xs:string">
																<xs:maxLength value="4000"/>
															</xs:restriction>
														</xs:simpleType>													
													</xs:element>
													<xs:element type="xs:string" name="PPL_SND_BNK_BIC" maxOccurs="1" minOccurs="0">
														
													</xs:element>
													<xs:element type="xs:string" name="PPL_SND_BNK_ACCOUNT" maxOccurs="1" minOccurs="0">
														
													</xs:element>
													<xs:element type="xs:string" name="PPL_RCV_ACCOUNT" maxOccurs="1" minOccurs="0">
														
													</xs:element>
													<xs:element name="PPL_RCV_INN" maxOccurs="1" minOccurs="0">
														
														<xs:simpleType>
															<xs:restriction base="xs:string">
																<xs:maxLength value="100"/>
															</xs:restriction>
														</xs:simpleType>													
													</xs:element>
													<xs:element name="PPL_RCV_CPP" maxOccurs="1" minOccurs="0">
														
														<xs:simpleType>
															<xs:restriction base="xs:string">
																<xs:maxLength value="100"/>
															</xs:restriction>
														</xs:simpleType>													
													</xs:element>
													<xs:element name="PPL_RCV_NAME" maxOccurs="1" minOccurs="0">
														
														<xs:simpleType>
															<xs:restriction base="xs:string">
																<xs:maxLength value="4000"/>
															</xs:restriction>
														</xs:simpleType>													
													</xs:element>
													<xs:element type="xs:string" name="PPL_RCV_BNK_BIC" maxOccurs="1" minOccurs="0">
														
													</xs:element>
													<xs:element type="xs:string" name="PPL_RCV_BNK_ACCOUNT" maxOccurs="1" minOccurs="0">
														
													</xs:element>
													<xs:element type="xs:string" name="PPL_PURPOSE" maxOccurs="1" minOccurs="0">
														
													</xs:element>
													<xs:element name="LIST_LINES" maxOccurs="1" minOccurs="1">
														<xs:complexType>
															<xs:sequence>
																<xs:element name="LINE" maxOccurs="unbounded" minOccurs="0">
																	<xs:complexType>
																		<xs:sequence>
																			<xs:element type="xs:date" name="PPL_LINE_OPERTIONAL_DAY" maxOccurs="1" minOccurs="1">
																				
																			</xs:element>
																			<xs:element type="xs:string" name="PPL_LINE_DB_CR" maxOccurs="1" minOccurs="1">  
																				
																			</xs:element>
																			<xs:element type="xs:string"  name="PPL_LINE_KBK" maxOccurs="1" minOccurs="1">
																				
																			</xs:element>
																			<xs:element type="xs:decimal" name="PPL_LINE_AMOUNT" maxOccurs="1" minOccurs="1">
																				
																			</xs:element>
																			<xs:element type="xs:integer" name="PPL_LINE_BOB_ID" maxOccurs="1" minOccurs="0">
																				
																			</xs:element>
																		</xs:sequence>
																	</xs:complexType>
																</xs:element>
															</xs:sequence>
														</xs:complexType>
													</xs:element>
												</xs:sequence>
											</xs:complexType>
										</xs:element>
									</xs:sequence>
								</xs:complexType>
							</xs:element>
						</xs:sequence>
					</xs:complexType>
				</xs:element>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
</xs:schema>


...
Рейтинг: 0 / 0
29.01.2020, 16:47
    #39920078
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с XML Data Source (SSIS)
сорри... удалите предыдущее
Модератор: Удалил.
Вообще, есть редактирование своих сообщений (кнопка "изменить" внизу сообщения), доступное в первые 15 минут после публикации

Данные
Код: xml
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.
<?xml version="1.0" encoding="WINDOWS-1251" ?>
<LIST_HEADER>
<TITLE>****************************</TITLE>
<ORG_NAME>***********</ORG_NAME>
<DATE>2019-05-31</DATE>
<RATE>****</RATE>
<HEADER>
<LIST_SECTIONS>
<SECTION>
<PPL_ID>12345678901</PPL_ID>
<PPL_REG_NUMBER>000</PPL_REG_NUMBER>
<PPL_REG_DATE>2019-04-30</PPL_REG_DATE>
<PPL_AMOUNT>9999999</PPL_AMOUNT>
<PPL_DB_CR>DB</PPL_DB_CR>
<PPL_SND_ACCOUNT>0000000000000000</PPL_SND_ACCOUNT>
<PPL_SND_INN>7777777777</PPL_SND_INN>
<PPL_SND_CPP>777777777</PPL_SND_CPP>
<PPL_SND_NAME>***************************************************************************************************************************************</PPL_SND_NAME>
<PPL_SND_BNK_BIC>000000000</PPL_SND_BNK_BIC>
<PPL_SND_BNK_ACCOUNT>44444444444444444444</PPL_SND_BNK_ACCOUNT>
<PPL_RCV_INN>7777777777</PPL_RCV_INN>
<PPL_RCV_CPP>999999999</PPL_RCV_CPP>
<PPL_RCV_NAME>AAAAAAAA</PPL_RCV_NAME>
<PPL_RCV_BNK_BIC>444444444</PPL_RCV_BNK_BIC>
<PPL_RCV_BNK_ACCOUNT>11111111111111111111</PPL_RCV_BNK_ACCOUNT>
<PPL_PURPOSE>********************************************************************************</PPL_PURPOSE>
<LIST_LINES>
<LINE>
<PPL_LINE_OPERTIONAL_DAY>2019-05-06</PPL_LINE_OPERTIONAL_DAY>
<PPL_LINE_DB_CR>DB</PPL_LINE_DB_CR>
<PPL_LINE_KBK>888888888888888888888888888888888888</PPL_LINE_KBK>
<PPL_LINE_AMOUNT>0000000</PPL_LINE_AMOUNT>
<PPL_LINE_BOB_ID>12345678901</PPL_LINE_BOB_ID>
</LINE>
</LIST_LINES>
</SECTION>
</LIST_SECTIONS>
</HEADER>
</LIST_HEADER>

...
Рейтинг: 0 / 0
29.01.2020, 16:50
    #39920080
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с XML Data Source (SSIS)
Сгенерированная схема
Код: xml
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.
<?xml version="1.0"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="LIST_HEADER">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" name="TITLE" type="xs:string" />
        <xs:element minOccurs="0" name="ORG_NAME" type="xs:string" />
        <xs:element minOccurs="0" name="DATE" type="xs:date" />
        <xs:element minOccurs="0" name="RATE" type="xs:string" />
        <xs:element minOccurs="0" name="HEADER">
          <xs:complexType>
            <xs:sequence>
              <xs:element minOccurs="0" name="LIST_SECTIONS">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element minOccurs="0" maxOccurs="unbounded" name="SECTION">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element minOccurs="0" name="PPL_ID" type="xs:unsignedLong" />
                          <xs:element minOccurs="0" name="PPL_REG_NUMBER" type="xs:string" />
                          <xs:element minOccurs="0" name="PPL_REG_DATE" type="xs:date" />
                          <xs:element minOccurs="0" name="PPL_AMOUNT" type="xs:decimal" />
                          <xs:element minOccurs="0" name="PPL_DB_CR" type="xs:string" />
                          <xs:element minOccurs="0" name="PPL_SND_ACCOUNT" type="xs:unsignedLong" />
                          <xs:element minOccurs="0" name="PPL_SND_INN" type="xs:unsignedLong" />
                          <xs:element minOccurs="0" name="PPL_SND_CPP" type="xs:unsignedInt" />
                          <xs:element minOccurs="0" name="PPL_SND_NAME" type="xs:string" />
                          <xs:element minOccurs="0" name="PPL_SND_BNK_BIC" type="xs:unsignedInt" />
                          <xs:element minOccurs="0" name="PPL_SND_BNK_ACCOUNT" type="xs:integer" />
                          <xs:element minOccurs="0" name="PPL_RCV_ACCOUNT" type="xs:unsignedLong" />
                          <xs:element minOccurs="0" name="PPL_RCV_INN" type="xs:unsignedLong" />
                          <xs:element minOccurs="0" name="PPL_RCV_CPP" type="xs:unsignedInt" />
                          <xs:element minOccurs="0" name="PPL_RCV_NAME" type="xs:string" />
                          <xs:element minOccurs="0" name="PPL_RCV_BNK_BIC" type="xs:unsignedInt" />
                          <xs:element minOccurs="0" name="PPL_RCV_BNK_ACCOUNT" type="xs:integer" />
                          <xs:element minOccurs="0" name="PPL_PURPOSE" type="xs:string" />
                          <xs:element minOccurs="0" name="LIST_LINES">
                            <xs:complexType>
                              <xs:sequence>
                                <xs:element minOccurs="0" name="LINE">
                                  <xs:complexType>
                                    <xs:sequence>
                                      <xs:element minOccurs="0" name="PPL_LINE_OPERTIONAL_DAY" type="xs:date" />
                                      <xs:element minOccurs="0" name="PPL_LINE_DB_CR" type="xs:string" />
                                      <xs:element minOccurs="0" name="PPL_LINE_KBK" type="xs:string" />
                                      <xs:element minOccurs="0" name="PPL_LINE_AMOUNT" type="xs:decimal" />
                                      <xs:element minOccurs="0" name="PPL_LINE_BOB_ID" type="xs:unsignedLong" />
                                    </xs:sequence>
                                  </xs:complexType>
                                </xs:element>
                              </xs:sequence>
                            </xs:complexType>
                          </xs:element>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

...
Рейтинг: 0 / 0
29.01.2020, 16:58
    #39920083
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с XML Data Source (SSIS)
Модератор
Вообще, есть редактирование своих сообщений (кнопка "изменить" внизу сообщения), доступное в первые 15 минут после публикации

Раньше не было, вот по привычке и написал :)
...
Рейтинг: 0 / 0
29.01.2020, 17:08
    #39920090
Borodat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с XML Data Source (SSIS)
SQL2008,
Советую изменить на string тип у ИНН, КПП и счетов. И на этом редактирование закончить.
...
Рейтинг: 0 / 0
29.01.2020, 17:14
    #39920097
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с XML Data Source (SSIS)
Borodat
SQL2008,
Советую изменить на string тип у ИНН, КПП и счетов. И на этом редактирование закончить.

И при попытке вставить в поле длиной 50 символов значение из XML по умолчанию 255 получить ошибку?
Можно конечно настроит выходы, но при каждом рефреше все это слетает... Нет уж!

И потом это не решает моей проблемы
...
Рейтинг: 0 / 0
29.01.2020, 19:39
    #39920179
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с XML Data Source (SSIS)
SQL2008,

действительно, с такой структурой не работает. Возможно, здесь "заточено" на реляционное представление, т.е. должна быть, как минимум, одна вложенная группа элементов, чтобы есть присвоить условный уникальный идентификатор.

Например, вот это будет работать:

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
<?xml version="1.0" encoding="WINDOWS-1251" ?>
<LIST_HEADER>
<LIST_HEADER_DATA>
<TITLE>****************************</TITLE>
<ORG_NAME>***********</ORG_NAME>
<DATE>2019-05-31</DATE>
<RATE>****</RATE>
</LIST_HEADER_DATA>
<HEADER>
<ECT>***</ECT>
<ECT>***</ECT>
</HEADER>
</LIST_HEADER>



После преобразований в моем примере получится две таблицы LIST_HEADER_DATA и HEADER, для каждой которых будет создан внутренний ключ, колонка с окончанием _id. Каждая из строк ECT может быть определена однозначно при организации цикла по набору данных.
...
Рейтинг: 0 / 0
29.01.2020, 20:05
    #39920189
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с XML Data Source (SSIS)
Владислав Колосов, спасибо.
Пошел по другому пути - переписываю пакет SSIS.
...
Рейтинг: 0 / 0
30.01.2020, 11:10
    #39920367
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с XML Data Source (SSIS)
SQL2008,

Радикальный подход. Хотя для решения проблемы достаточно "обернуть" XML в теги, например:

<?xml version="1.0" encoding="WINDOWS-1251" ?>
<TOP>
<LIST_HEADER>
...
</LIST_HEADER>
</TOP>
...
Рейтинг: 0 / 0
31.01.2020, 11:39
    #39920942
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с XML Data Source (SSIS)
Владислав Колосов
SQL2008,

Радикальный подход. Хотя для решения проблемы достаточно "обернуть" XML в теги, например:

<?xml version="1.0" encoding="WINDOWS-1251" ?>
<TOP>
<LIST_HEADER>
...
</LIST_HEADER>
</TOP>

Увы. Файлов порядка 1000, не назаворачиваешься.
Написал скрипт, который получает на вход файл, парсит XML и сохраняет дату в переменную.
Вопрос решен.
...
Рейтинг: 0 / 0
31.01.2020, 11:44
    #39920946
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с XML Data Source (SSIS)
Вот код скрипта, может кому пригодится.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
public void Main()
	{
            Dts.VariableDispenser.LockForRead("User::fileNameXml");
            Dts.VariableDispenser.LockForWrite("User::exportDate");
            string fileXML = Dts.Variables["User::fileNameXml"].Value.ToString(); ;
            XmlDocument xDoc = new XmlDocument();
            xDoc.Load(fileXML);

            XmlElement xRoot = xDoc.DocumentElement;
            foreach (XmlNode xnode in xRoot)
            {
                if (xnode.Name == "DATE")
                {
                    Dts.Variables["User::exportDate"].Value = xnode.InnerText.ToString();
                    Dts.TaskResult = (int)ScriptResults.Success;
                    return;
                }
            }
            Dts.TaskResult = (int)ScriptResults.Failure;
        }


И вся головная боль :)
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Проблема с XML Data Source (SSIS) / 17 сообщений из 17, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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