Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Обработка текста в XSLT преобразовании  (Прочитано 5839 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
lapulya
Молодой специалист

ru
Offline Offline

« : 27-08-2010 15:00 » 

не знаю в какой раздел писать, так что пишу сюда. Суть проблемы:

вот данные

Код:
<?xml version="1.0" encoding="utf-8" ?>
<article>
  <paragraph header="Заголовок">
    НАЧАЛО ПАРАГРАФ1
    <section>
      СЕКЦИЯ 1
    </section>
    <section>
      НАЧАЛО СЕКЦИИ2:
      <list>
        НАЧАЛО ЛИСТА
        <item>НАЧАЛО ИТЕМА<ref url="page1.aspx" text="text1"/>КОНЕЦ ИТЕМА</item>
        <item><ref url="page2.aspx" text="text2"/> и</item>
        КОНЕЦ ЛИСТА
      </list>
      КОНЕЦ СЕКЦИИ2
    </section>
    КОНЕЦ ПАРАГРАФ1
  </paragraph>
</article>

вот таблица стилей

Код:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:output method="html" omit-xml-declaration="yes"/>

  <xsl:template match="/">
    <xsl:apply-templates/>
  </xsl:template>
  
  <xsl:template match="paragraph">
    <div class="articleParagraph">
      <h2>
        <xsl:value-of select="@header"/>
        <xsl:value-of select="text()"/>
      </h2>
      <xsl:apply-templates/>
    </div>
  </xsl:template>

  <xsl:template match="paragraph/section">
    <div>
      <div>
        <b>
        <xsl:value-of select="text()"/>
        </b>
      </div>
      <xsl:apply-templates/>
    </div>
  </xsl:template>

  <xsl:template match="list">
    <ul>
      <xsl:apply-templates/>
    </ul>
  </xsl:template>

  <xsl:template match="list/item">
    <li>
      <xsl:apply-templates/>
    </li>
  </xsl:template>

  <xsl:template match="ref">
    <a href="#">
      <xsl:value-of select="@text"/>
    </a>
  </xsl:template>

</xsl:stylesheet>
при этом происходит задваивание текста, как от этого избавиться? Дело в том что при использовании apply-template происходит полная передача управления специфицирующим шаблонам (даже если я вызвал text()) и при этом отрабатывает стандартный обработчик текстового узла (копирует падла содержимое в выходной документ, что мне НЕ нужно)
« Последнее редактирование: 27-08-2010 15:03 от lapulya » Записан

С уважением Lapulya
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 27-08-2010 20:28 » 

lapulya, попробуй заменить

Код:
  <xsl:template match="/">
    <xsl:apply-templates/>
  </xsl:template>

на

Код:
  <xsl:template match="/article">
    <xsl:apply-templates select="section"/>
  </xsl:template>
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
lapulya
Молодой специалист

ru
Offline Offline

« Ответ #2 : 27-08-2010 23:12 » 

Спасибо! след был взят, вот решение

<xsl:apply-templates select="*[not(text)]"/>
Записан

С уважением Lapulya
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines