powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Полурабочий цикл. Как исправить?
7 сообщений из 7, страница 1 из 1
Полурабочий цикл. Как исправить?
    #38578157
zanac
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ОС - XP64sp2, среда разработки - Eclipse с плагинами для web tools : Eclipse XML Editors and Tools, Eclipse XPath 2 Developers Tools и Eclipse XSL Developer Tools, XSLT-процессор - XALAN

Счетчик работает, но данные берет только из первой цепочки узлов Line\INF_PREAK
Что я делаю не так? Вроде код элементарный...

XML файл :
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
<?xml version="1.0" encoding="UTF-8"?>
<PickingRequest>
	<Order No="C3710177">
		<OrderDate>2012.11.15</OrderDate>
		<ShipFrom>4771459000007</ShipFrom>
		<ShipTo>9854485652622</ShipTo>
		<Lines>
			<Line No="24339858">
				<INF_PREK>A000043</INF_PREK>
				<ProductDescription>Makaronid sarvekesed v&#228;ikesed ARRIGHI 400g</ProductDescription>
			</Line>
			<Line No="24339869">
				<INF_PREK>A000044</INF_PREK>
				<ProductDescription>Makaronid spiraalid ARRIGHI 500g</ProductDescription>

			</Line>
		</Lines>
	</Order>
</PickingRequest>



XSLT шаблон :

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:template match="/">
		<!-- TODO: Auto-generated template -->
		<xsl:element name="InstructionToDespatch-Lines">
			<xsl:for-each select="PickingRequest/Order/Lines/Line">
				<xsl:element name="Line">
					<xsl:element name="Line-Item">
						<xsl:element name="LineNumber">
							<xsl:number value="position() * 10" format="1" />
						</xsl:element>
						<xsl:element name="SupplierItemCode">
							<xsl:value-of select="//INF_PREK" />
						</xsl:element>
						<xsl:element name="ItemDescription">
							<xsl:value-of select="//ProductDescription" />
						</xsl:element>
					</xsl:element>
				</xsl:element>
			</xsl:for-each>
		</xsl:element>
	</xsl:template>
</xsl:stylesheet>



Выходной файл(почему-то одной строкой) :
Код: xml
1.
<?xml version="1.0" encoding="UTF-8"?><InstructionToDespatch-Lines><Line><Line-Item><LineNumber>10</LineNumber><SupplierItemCode>A000043</SupplierItemCode><ItemDescription>Makaronid sarvekesed v&#228;ikesed ARRIGHI 400g</ItemDescription></Line-Item></Line><Line><Line-Item><LineNumber>20</LineNumber><SupplierItemCode>A000043</SupplierItemCode><ItemDescription>Makaronid sarvekesed v&#228;ikesed ARRIGHI 400g</ItemDescription></Line-Item></Line></InstructionToDespatch-Lines>
...
Рейтинг: 0 / 0
Полурабочий цикл. Как исправить?
    #38578177
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zanacЧто я делаю не так?
<xsl:value-of select="//INF_PREK" />
<xsl:value-of select="//ProductDescription" />

Что означают два слеша, знаете?
...
Рейтинг: 0 / 0
Полурабочий цикл. Как исправить?
    #38578209
zanac
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Antonariy,

"//" очень часто встречается в путях адресации. Когда он используется в начале пути адресации, он обозначает: выбрать все узлы определенного типа в документе (преобразование 1). Внутри пути адресации он обозначает: выбрать все узлы, являющиеся потомками узла, указанного в первой части пути адресации (преобразование 2).
Взял отсюда
...
Рейтинг: 0 / 0
Полурабочий цикл. Как исправить?
    #38578272
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не читайте там, это какой-то косноязычный поц писал. Лучше всего тут .
// означает искать узел по всем потомкам начиная с корня, .// — начиная с текущего узла.

У вас всегда выбираются первые попавшиеся INF_PREK и ProductDescription, уберите слеши.
...
Рейтинг: 0 / 0
Полурабочий цикл. Как исправить?
    #38578304
zanac
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Antonariy, теперь все норм выводит. Но почему-то одной строкой вместо дерева... Не должно быть такого.
...
Рейтинг: 0 / 0
Полурабочий цикл. Как исправить?
    #38578311
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну а плохо разве? Объем меньше. Вам же наверное не любоваться на него.

<xsl:output method="xml" indent="yes"/>
...
Рейтинг: 0 / 0
Полурабочий цикл. Как исправить?
    #38578323
zanac
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AntonariyНу а плохо разве? Объем меньше. Вам же наверное не любоваться на него.

Ну почему же нельзя любоваться красиво оформленным результатом своего труда? =)

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
<Line>
	<Line-Item>
		<LineNumber>10</LineNumber>
		<SupplierItemCode>A000043</SupplierItemCode>
		<ItemDescription>Makaronid sarvekesed v&#228;ikesed ARRIGHI 400g
		</ItemDescription>
	</Line-Item>
</Line>
<Line>
	<Line-Item>
		<LineNumber>20</LineNumber>
		<SupplierItemCode>A000044</SupplierItemCode>
		<ItemDescription>Makaronid spiraalid ARRIGHI 500g</ItemDescription>
	</Line-Item>
</Line>



Самое интересное, если задействовать весь шаблон, то получится-таки дерево
Шаблон :
Код: 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.
<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet version="1.0"
	xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:output method="xml" indent="no" />

	<xsl:template match="/">
		<xsl:element name="Document-InstructionToDespatch">
			<xsl:call-template name="DespatchHeader" />
			<xsl:call-template name="DocPart" />
			<xsl:call-template name="DespatchLines" />
			<xsl:call-template name="Summary" />
		</xsl:element>
	</xsl:template>

	<xsl:template name="DespatchHeader">
		<xsl:element name="InstructionToDespatch-Header">
			<xsl:call-template name="DespatchNumber" />
			<xsl:call-template name="DespatchDate" />		
		</xsl:element>
	</xsl:template>

	<xsl:template name="DespatchNumber">
		<xsl:element name="InstructionToDespatchNumber">
			<xsl:value-of select="//Order/@No" />
		</xsl:element>
	</xsl:template>

	<xsl:template name="DespatchDate">
		<xsl:element name="InstructionToDespatchDate">
			<xsl:value-of select="translate(//OrderDate, '.', '-')">
			</xsl:value-of>
		</xsl:element>
	</xsl:template>

	<xsl:template name="DocPart">
		<xsl:element name="Document-Parties">
			<xsl:element name="Sender">
				<xsl:element name="ILN">
					<xsl:value-of select="//ShipFrom" />
				</xsl:element>
			</xsl:element>
			<xsl:element name="Receiver">
				<xsl:element name="ILN">
					<xsl:value-of select="//ShipTo" />
				</xsl:element>
			</xsl:element>
		</xsl:element>
	</xsl:template>

	<xsl:template name="DespatchLines">
		<xsl:element name="InstructionToDespatch-Lines">
			<xsl:for-each select="PickingRequest/Order/Lines/Line">
				<xsl:element name="Line">
					<xsl:element name="Line-Item">
						<xsl:element name="LineNumber">
							<xsl:number value="position() * 10" format="1" />
						</xsl:element>
						<xsl:element name="SupplierItemCode">
							<xsl:value-of select="INF_PREK" />
						</xsl:element>
						<xsl:element name="ItemDescription">
							<xsl:value-of select="ProductDescription" />
						</xsl:element>
					</xsl:element>
				</xsl:element>
			</xsl:for-each>
		</xsl:element>
	</xsl:template>

	<xsl:template name="Summary">
		<xsl:element name="InstructionToDespatch-Summary">
			<xsl:element name="TotalLines">
				<xsl:value-of select="count(//Line)" />
			</xsl:element>
		</xsl:element>
	</xsl:template>
	
</xsl:stylesheet>




Antonariy<xsl:output method="xml" indent="yes"/>
Данная инструкция убирает всю табуляцию, увы
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Полурабочий цикл. Как исправить?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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