Гость
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Полурабочий цикл. Как исправить? / 7 сообщений из 7, страница 1 из 1
04.03.2014, 18:14
    #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
04.03.2014, 18:25
    #38578177
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Полурабочий цикл. Как исправить?
zanacЧто я делаю не так?
<xsl:value-of select="//INF_PREK" />
<xsl:value-of select="//ProductDescription" />

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

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

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

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


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