powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Как правильно вывести вложенность
5 сообщений из 5, страница 1 из 1
Как правильно вывести вложенность
    #34404829
SuSa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго время суток
есть вопрос:
в документе есть участок
<sch:p>наверно <p>сдесь должен быть</p><sch:b>текст</sch:b></sch:p>
Пишу обработку вот примерно так:
<xsl:template match="sch:p | p" mode="nachalo">
<!-- надо подумать как правильно скопировать, чтоб один раз заходило в нужное место-->
<p>
<xsl:value-of select="text()"/>
<xsl:apply-templates mode="TEXT"/>
</p>
</xsl:template>
Под <xsl:apply-templates mode="TEXT"/> - понимаеся как раз обработка еще левосторонних тегов (они внутри себя кроме текста ничего содержать не могут). А вот "p" может внутри себя содержать как текст так и сново "p
на выходе надо получить:
<p>наверно <p>сдесь должен быть</p><b>текст</b></p>
Тоесть тоже самое токо без приставки
Чего не так? и как правильно
...
Рейтинг: 0 / 0
Как правильно вывести вложенность
    #34405783
SuSa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потдержим традицию и сами ответим на свой вопрос
Решение.. как это можно сделать.. скорей всего один из вариантов, а мне большее и не надо
<xsl:template match="sch:p | p" mode="TEXT">
<p>
<xsl:apply-templates mode="TEXT"/>
</p>
</xsl:template>
И всё. Таким образом он обработает и вложенные теги с таким же именем и другие теги, предназначеные для оформления текста.
...
Рейтинг: 0 / 0
Как правильно вывести вложенность
    #34408851
SuSa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В продолжение этой темы, возникли новые проблемы в подобном случаи
к примеру есть xml
Код: plaintext
1.
2.
3.
4.
5.
<root>
<a diagnostics="d1"> текст:</a>
<diagnostics>
<diagnostic id="d1"> ошибка № 1  <name/></diagnostic>
</diagnostics>
</root>
и xsl:
Код: plaintext
1.
2.
3.
4.
<xsl:template match="sch:a | a">
<p>
<xsl:apply-templates mode="TEXT"/>
</p>
</xsl:template>
где <xsl:apply-templates mode="TEXT"/> - выведет текст ТЕКЩЕГО обрабатываемого узла и обработает команды, елси они есть
т.о. результат будет
<p> текст:</p>
Но в данном случаи надо
<p> текст: ошибка №1</p>
Т.е помимо самого сообщения еще и текст тега чъе значение id=diagnostics (значению обрабатываемого тега)
Делаю так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<xsl:template match="sch:a | a">
<p>
<xsl:apply-templates mode="TEXT"/>
 <xsl:if test="(string-length( @diagnostics ) & gt; 0)and (//sch:diagnostic/@id=@diagnostics)">
</xsl:call-template name="odin">
</xsl:if>
</p>
</xsl:template>
   <xsl:template name="odin">
      <xsl:apply-templates mode="TEXT"/>
   </xsl:template>
Но в результате получаю : "текст: текст:". Так как при использовании call-template позиция остается неизменной
Елси написать
Код: plaintext
1.
2.
3.
<xsl:template name="odin">
      <xsl:value-of select="//sch:diagnostic[@id=current()/@diagnostics]/text()"/>
      <xsl:apply-templates mode="TEXT"/>
   </xsl:template>
То по идеи все нормално если не встретятся команды, елси они есть то текст до них выводится, после их нет.
Как написать так чтобы вывеля и текст и обработались команды, если к примеру их обработка записана в<xsl:apply-templates mode="TEXT"/>?
...
Рейтинг: 0 / 0
Как правильно вывести вложенность
    #34410911
SuSa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И снова! Потдержим традицию и сами ответим на свой вопрос
решение
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<xsl:template match="sch:a | a">
<p>
<xsl:apply-templates mode="TEXT"/>
 <xsl:if test="(string-length( @diagnostics ) & gt; 0)and (//sch:diagnostic/@id=@diagnostics)">
<xsl:for-each select="//sch:diagnostic[@id=current()/@diagnostics]/.">
</xsl:call-template name="odin">
</xsl:for-each>
</xsl:if>
</p>
</xsl:template>
   <xsl:template name="odin">
      <xsl:apply-templates mode="TEXT"/>
   </xsl:template>
...
Рейтинг: 0 / 0
Как правильно вывести вложенность
    #34411223
SuSa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если кто помнит на форуме как то говорилось что for-each сбивает текущую позицию.
В следсвии с этим если call-template позицию не изменяет, то в сочетании с for-each это можно исправить :)
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Как правильно вывести вложенность
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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