powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Некорректный выбор шаблона для парсинга
2 сообщений из 2, страница 1 из 1
Некорректный выбор шаблона для парсинга
    #36405116
- wAw -
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите, пожалуйста, разобраться почему для парсинга XML выбирается не тот шаблон, который наиболее подходит по match.

XSL:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns="http://www.w3.org/1999/xhtml" 
	xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:template match="//tariff[@id='Полный']"> 250 </xsl:template>
<xsl:template match="//tariff[@id='Детский']"> 63 </xsl:template>
<xsl:template match="//tariff[@id='Семейный']"> 500 </xsl:template>
<xsl:template match="//tariff[@id='Туда-обратно']"> 360 </xsl:template>
<xsl:template match="//class[@id='Бизнес']"> 0 </xsl:template>

<xsl:template match="//airport[@id='Шереметьево']//class[@id='Бизнес']//tariff[@id='Полный']"> 700 </xsl:template>
<xsl:template match="//airport[@id='Шереметьево']//class[@id='Бизнес']//tariff[@id='Детский']"> 350 </xsl:template>

<xsl:template match="//airport[@id='Шереметьево']//tariff[@id='Полный']"> 200 </xsl:template>
<xsl:template match="//airport[@id='Шереметьево']//tariff[@id='Детский']"> 50 </xsl:template>

</xsl:stylesheet>

Если его применить к XML:

Код: plaintext
1.
2.
3.
4.
5.
6.
<?xml version="1.0" encoding="UTF-8"?>
<airport id="Шереметьево">
	<class id="Бизнес">
		<tariff id="Детский"></tariff>
	</class>
</airport>

то на выходе получим результат - 0, хотя ожидается 350.

Не понимаю почему используется match="//class[@id='Бизнес']", вместо более полного match="//airport[@id='Шереметьево']//class[@id='Бизнес']//tariff[@id='Детский']".

При этом, если использовать XML вида

Код: plaintext
1.
2.
3.
4.
<?xml version="1.0" encoding="UTF-8"?>
<airport id="Шереметьево">
	<tariff id="Детский"></tariff>
</airport>

то будет применен корректный, наиболее полный шаблон - match="//airport[@id='Шереметьево']//tariff[@id='Детский']".
...
Рейтинг: 0 / 0
Некорректный выбор шаблона для парсинга
    #36406434
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тынц читать про приоритеты
- wAw -то на выходе получим результат - 0, хотя ожидается 350.

Не понимаю почему используется match="//class[@id='Бизнес']", вместо более полного match="//airport[@id='Шереметьево']//class[@id='Бизнес']//tariff[@id='Детский']".
Приоритеты совпали, поэтому выбирается тот, который объявлен первым
- wAw -При этом, если использовать XML вида

Код: plaintext
1.
2.
3.
4.
<?xml version="1.0" encoding="UTF-8"?>
<airport id="Шереметьево">
	<tariff id="Детский"></tariff>
</airport>
то будет применен корректный, наиболее полный шаблон - match="//airport[@id='Шереметьево']//tariff[@id='Детский']".из-за отсутствия шаблона match="//airport[@id='Шереметьево']"

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


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