Форум программистов, компьютерный форум, киберфорум
XML/XSL
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
2 / 2 / 1
Регистрация: 19.10.2014
Сообщений: 64

Обработка вложенных в текст тегов

16.09.2019, 11:59. Показов 1504. Ответов 1
Метки xslt (Все метки)

Студворк — интернет-сервис помощи студентам
Задача такая, есть xml содержащий внутри текста вложенные теги, нужно сгенерировать из него html, например:
XML
1
<text>this text <eb>is bold</eb> and this text <ei>is italic</ei></text>
шаблон xsl:

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    <xsl:template match="text">
        <span lang="en" title="text" class='text'>
            <xsl:apply-templates />
        </span>
    </xsl:template>
    
    <xsl:template match="eb">
        <span lang="en" title="text" class='eb'>
            <xsl:apply-templates/>
        </span>
    </xsl:template>
    
    <xsl:template match="ei">
        <span lang="en" title="text" class='ei'>
            <xsl:apply-templates/>
        </span>
    </xsl:template>
 
    <xsl:template match="@*|node()">
        <xsl:copy copy-namespaces="no">
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>
Результат выходит такой:
HTML5
1
<span title="text" class="text" lang="en">this text <span title="eb" class="eb" lang="en">is bold</span> and this text <span title="ei" class="ei" lang="en">is italic</span></span>
Но требуемый результат должен быть такой:
HTML5
1
<span title="text" class="text" lang="en">this text </span><span title="eb" class="eb" lang="en">is bold</span><span title="text" class="text" lang="en"> and this text </span><span title="ei" class="ei" lang="en">is italic</span></span>
На имена тегов особенно ориентироваться не нужно, их очень большое количество и вложенность может быть абсолютно разная. Указанный результат необходим, т.к. внутри этих span'ов могут быть вложены блочные элементы и не нужно чтоб табуляция между такими блоками применялась. В общем, как сделать, чтоб избавиться от вложенностей внутри спанов, чтоб они шли инлайном?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.09.2019, 11:59
Ответы с готовыми решениями:

Преобразование вложенных тегов xml
Ну допустим у меня есть &lt;class&gt; &lt;student&gt; &lt;name&gt;Имя&lt;/name&gt; &lt;grades&gt; &lt;math&gt;67&lt;/math&gt; ...

Обработка вложенных тегов
Доброго всем дня. Решение задачи я знаю, но все же интересно, нет ли &quot;более изящного&quot; решения. Итак. Задача - имеется...

Парсинг вложенных тегов в xml
здравствуйте, интересует вопрос, как парсить &quot;вложенные&quot; теги. У меня есть XMLчик &lt;?xml version='1.0' encoding='windows-1251'?&gt; ...

1
 Аватар для diadiavova
7258 / 2605 / 744
Регистрация: 11.04.2015
Сообщений: 4,150
Записей в блоге: 43
17.09.2019, 20:44
Xadjee, думаю, тут разные подходы могут быть и, наверное, от задачи много зависит. Но если вот так вот "в лоб" решать, то можно обрабатывать текстовые узлы непосредственно, уж коль скоро класс для спана создается из имени элемента непосредственного родителя, а для элементов перенаправлять обработку далее. Как-то так.
XML
1
2
3
4
5
6
<?xml version="1.0" encoding="windows-1251"?>
<root>
  <text>
    this text <eb>is bold</eb> and this text <ei>is italic</ei>
  </text>
</root>
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?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="text()">
    <span title="text" class="{local-name(..)}">
      <xsl:value-of select="."/>
    </span>
  </xsl:template>
 
  <xsl:template match="*">
    <xsl:apply-templates/>
  </xsl:template>
  <xsl:template match="/">
    <output>
      <xsl:apply-templates select="/*/*"/>
    </output>
  </xsl:template>
</xsl:stylesheet>
Получаем следующий результат
XML
1
2
3
<?xml version="1.0" encoding="utf-8"?><output><span title="text" class="text">
    this text </span><span title="text" class="eb">is bold</span><span title="text" class="text"> and this text </span><span title="text" class="ei">is italic</span><span title="text" class="text">
  </span></output>
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.09.2019, 20:44
Помогаю со студенческими работами здесь

Вытащить содержимое тегов, в т.ч. и вложенных php
Здравствуйте. Подскажите, как вытащить текст внутри всех тегов div, например в этом случаи: &lt;div&gt;text 1&lt;div&gt;text...

Регулярное выражение для вложенных тегов
Как из блока temp взять значение температуры (+11). Брать напрямую с &lt;dd class=&quot;value m_temp c&quot;&gt; не вариант, так как блоков с таким...

Обработка вложенных стилей
Здравствуйте! Подскажите пожалуйста, как сделать следующее: Я допустим на своём сайте в настройках профиля хочу дописать модуль, что бы...

Обработка тегов
Пытаюсь сделать обработчик тегов. Входные данные - fallout_4 Vault_Girl cvxgds user_id=1 И вот я пытаюсь сделать проверку если ли тег в...

Обработка двух вложенных списков
Есть два списка: 1. 2. Как вывести индексы второго списка, значения которых отличаются от значений первого списка?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru