powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Левый текст в выходном докумнете
19 сообщений из 19, страница 1 из 1
Левый текст в выходном докумнете
    #34405846
SuSa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет всем. Вопрос такой
есть xml, есть xsl. Обрабатываю ... все работает как надо, выводит то что нужно, все шаблоны отрабатывают тип-топ, но есть одно НО... по мимо полезной информации в выходной файл вылазит и простой текст из xml
Пытался дебагером построчно посмотреть где вылазит, чтоб забить его, но увидел лишь следующее:
К примеру в xsl есть шаблон по обработки некого тега, а в данном xml такого тега нет, дебагер встает на (допустим)
<xsl:apply-templates select="teg1"/>. не находит его в xml, не заходит, идет дальше, но тут же в документе появляются все текстовые значения xml документа.
И в результате получаю смесь нужной информации и текста.
Как с этим бороться, может кто встречал
...
Рейтинг: 0 / 0
Левый текст в выходном докумнете
    #34406181
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
возможно, применяются шаблоны по умолчанию. Какой процессор?
...
Рейтинг: 0 / 0
Левый текст в выходном докумнете
    #34406322
SuSa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Saxon 7-3
Saxon 8B - Oxygen v.8.8
...
Рейтинг: 0 / 0
Левый текст в выходном докумнете
    #34406366
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
приведи минимальный вариант документа и преобразования, когда такое получается. Простое <apply-templates/> используется?
...
Рейтинг: 0 / 0
Левый текст в выходном докумнете
    #34407635
SuSa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К примеру:
xml:
Код: plaintext
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"?>
<employee>
   <INSTANCE>
      <book avtor="Иван Сид">Иван сид</book>
      <title>Manager_1</title>
      <title1>Manager_1</title1>
      </INSTANCE>
   <INSTANCE>
      <book avtor="Иван Ин">Иван Ин</book>
      <title>Manager_3</title>
   </INSTANCE>
   <INSTANCE>
      <book avtor="Иван Гид">Иван Гид</book>
      <title>Man_2</title>
   </INSTANCE>
   <INSTANCE>
      <book avtor="Иван Инъя"> 47 </book>
      <title>Manager_4</title>
   </INSTANCE>
</employee>
xsl:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">

	<xsl:template match="/">
		<xsl:text>
</xsl:text>
		<root>
			<xsl:for-each select="//INSTANCE">
				<xsl:if test="book[@avtor='Иван Гид']">
					<xsl:copy-of select="."/>
				</xsl:if>
				<xsl:text>
</xsl:text>
			</xsl:for-each>
		</root>
		<xsl:apply-templates mode="text"/>
	</xsl:template>
	<xsl:template match="title1" mode="text">
		<p>
			<xsl:value-of select="."/>
		</p>
	</xsl:template>
</xsl:stylesheet>
Результат такой же если в xml нет тега <title1>
и если в xsl вместо <xsl:apply-templates mode="text"/> написано <xsl:apply-templates/>
...
Рейтинг: 0 / 0
Левый текст в выходном докумнете
    #34411027
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
очевидно, применяются темплейты по умолчанию. Напомню, что они делают так: бегут по дереву, выкидывают аттрибуты и комментарии и копируют текстовые узлы в выходной документ, что ты и наблюдаешь.
...
Рейтинг: 0 / 0
Левый текст в выходном докумнете
    #34411208
SuSa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как с ними бороться?
Я конечно придумал один способ, но наверно он не очень хороший с точки зрения программирования, он больше смахивает на заглушку бага проги.
Смысл его такой прежде чем запустить шаблон по обработке какого-то тега, проверяю есть ли он вообще в документе.
...
Рейтинг: 0 / 0
Левый текст в выходном докумнете
    #34411272
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SuSaКак с ними бороться?написать такое преобразование, какое тебе надо.
...
Рейтинг: 0 / 0
Левый текст в выходном докумнете
    #34411300
SuSa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То есть писать xsl под конкретный xml документ. А если пишется универсальный по обработке к примеру 20 различных тегов.
И если в текущем xml есть токо 10 уникальных тегов, то чего переписывать xsl? и блокировать проверку других 10 тегов, чтобы недай бог ничего лишнего не вышло?
...
Рейтинг: 0 / 0
Левый текст в выходном докумнете
    #34411301
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно переопределить шаблон по-умолчанию:
Код: plaintext
1.
2.
<xsl:template match="*" mode="text">
 <xsl:apply-templates select="*" mode="text"/>
</xsl:template>
...
Рейтинг: 0 / 0
Левый текст в выходном докумнете
    #34411338
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
или так
Код: plaintext
<xsl:template match="text()" mode="text"/>
...
Рейтинг: 0 / 0
Левый текст в выходном докумнете
    #34411373
SuSa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
:)
Спасибо но не катит
у меня с помощью <xsl:apply-templates mode="text"/> вызываются:
<xsl:template match="span" mode="text"/>
<xsl:template match="dir" mode="text"/>
<xsl:template match="emph" mode="text"/>
... и еще около 5 шаблонов
...
Рейтинг: 0 / 0
Левый текст в выходном докумнете
    #34411619
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и?
...
Рейтинг: 0 / 0
Левый текст в выходном докумнете
    #34411651
SuSa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чего "и?".. помимо mode="text" есть еще около 5 групировок по mode, и еще несколько шаблонов без него.
Практически все время найдется тот шаблон который не понадобиться, ставить на каждый вызов проверку плана "а нужно ли его проверять" приведет к избыточности исходного кода (начальство по головке не погладит, отвечаю за каждую строчку, с обоснованием "а нафига она нужна?", и "а почему не так? ").
? Как избежать вывода текста если шаблон не применится,но вызовиться
...
Рейтинг: 0 / 0
Левый текст в выходном докумнете
    #34411697
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SuSaЧего "и?".. помимо mode="text" есть еще около 5 групировок по mode, и еще несколько шаблонов без него.тогда пиши переопределение для всех мод.
SuSaКак избежать вывода текста если шаблон не применится,но вызовитьсячаво каво?
...
Рейтинг: 0 / 0
Левый текст в выходном докумнете
    #34411789
SuSa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot ]К примеру:
xml:
Код: plaintext
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"?>
<employee>
   <INSTANCE>
      <book avtor="Иван Сид">Иван сид</book>
      <title>Manager_1</title>
      </INSTANCE>
   <INSTANCE>
</employee>      
xsl:
....
<xsl:template match="/">
...
	<xsl:apply-templates mode="text"/>
</xsl:template>
	<xsl:template match="title1" mode="text">
		<p>
			<xsl:value-of select="."/>
		</p>
	</xsl:template>
Как в примере. Мне чего все шаблоны поименно вызывать?
...
Рейтинг: 0 / 0
Левый текст в выходном докумнете
    #34411827
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зачем поимённо? Ты же написал <xsl:apply-templates mode="text"/> – будут вызваны шаблоны для всех узлов.
...
Рейтинг: 0 / 0
Левый текст в выходном докумнете
    #34411889
SuSa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а если надо применить те что не имеют mode? и те что имеют, легче всего чтоб выполнились все написать
<xsl:aplly-templates/>
И еще вопрос
в чем радикальное отличие
template match="*" и
template match="/"
...
Рейтинг: 0 / 0
Левый текст в выходном докумнете
    #34412012
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SuSaа если надо применить те что не имеют mode? и те что имеютвозможно, стоит пересмотреть дизайн трансформации.

SuSaв чем радикальное отличие
template match="*" и
template match="/"первый мачит любой элемент, второй – корень документа.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Левый текст в выходном докумнете
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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