Задать вопрос
@drumminman
Tehwriter, mountain biker, trailbuilder

Как нормализовать вывод содержимого элемента, если в нем есть дочерние inline-элементы?

Добрый всем день.
Имею примерный кусок XML (форматирование сохраненено):
<para>Sed ut perspiciatis unde omnis iste <emphasis targetptr="Id_link">
              <literal>Текст ссылки</literal>
            </emphasis>, natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi.</para>

В котором между тэгами emphasis и literal закрались лишние пробелы.

Есть шаблон в скрипте преобразования, который меняет тип атрибута в тэге emphasis (на вторую часть условия внимания можно не обращать, она к делу не относится):
<xsl:template match="emphasis[@targetptr]">              
        <xsl:choose>
            <xsl:when test="descendant::node() and (not(child::text()) or ((normalize-space(child::text())) = ''))">
                <xsl:element name="emphasis">
                    <xsl:attribute name="linkend">
                        <xsl:value-of select="attribute::targetptr"/>
                    </xsl:attribute>
                    <xsl:copy-of select="child::node()"/>                   
                </xsl:element>
            </xsl:when>
            <xsl:otherwise>
                <xsl:element name="emphasis">
                    <xsl:attribute name="linkend">
                        <xsl:value-of select="attribute::targetptr"/>
                    </xsl:attribute> 
                    <xsl:value-of select="normalize-space(child::text())"/>
                </xsl:element>                 
            </xsl:otherwise>
        </xsl:choose>       
    </xsl:template>

При отработке этого скрипта проблема в том, что содержимое выводится все с теми же лишними пробелами. И вот вопрос - как нормализовать такую строку? При использовании <value-of select="normilize-space(child::text())"> получаю на выход просто конструкцию <emphasis>Текст ссылки</emphasis>, а нужно сохранить структуру вложенных элементов.
При использовании <xsl:copy-of select="descendant::node()"/> - получаю на выходе
<emphasis>  <literal>Текст ссылки</literal> Текст ссылки</emphasis
  • Вопрос задан
  • 13 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
@drumminman Автор вопроса
Tehwriter, mountain biker, trailbuilder
Нашел рабочий, в целом, вариант в одном из вопросов
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы