Довольно печатать XML-данные в JSP

Как правильно распечатать (т.е. с отступом) XML-данные в JSP? У меня есть следующий код:

<c:forEach items="${stuffs}" var="stuff">
    <pre>
        <c:out value="${stuff}" escapeXml="true"/><br/>
    </pre>
</c:forEach>

Но проблема в том, что когда ${stuff} является неформатированным XML, он будет отображаться в jsp как один длинный XML-данные. Мне нужно, чтобы это было красиво напечатано внутри тега <p>.


person ryanprayogo    schedule 05.05.2011    source источник


Ответы (3)


В XSLT есть простые средства сделать это с помощью элемента xsl:output. Если вы можете применить XSLT, я предлагаю использовать подобную таблицу стилей (на основе преобразования личности):

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:strip-space elements="*" />
    <xsl:output method="xml" indent="yes" />
    <xsl:template match="node()|@*">
        <xsl:copy>
            <xsl:apply-templates select="node()|@*" />
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>
person mousio    schedule 05.05.2011
comment
Вы можете использовать или не использовать xsl:strip-space, но если вы это сделаете, не забудьте использовать xsl:preserve-space, если вам нужно, например. сохранять текстовые узлы только с пробелами в смешанном содержимом. - person mousio; 06.05.2011
comment
Кажется, это работает для меня из нескольких альтернатив, но мои теги ‹script› удаляются из результата. Мысли? - person aceofspades; 19.01.2012
comment
@aceofspades: Странно… У вас есть простой образец? У меня не было проблем с тегами script при использовании вышеуказанного преобразования. Может ли это быть проблемой пространства имен? Можете ли вы воспроизвести его с упрощенными входными документами? Какие процессоры XSLT вы пробовали? Вы уверены, что это не проблема средства просмотра XML? - person mousio; 20.01.2012
comment
У меня есть более одного элемента верхнего уровня. Я предполагаю, что поэтому. Спасибо-- - person aceofspades; 20.01.2012

Если вам нужно простое решение, не беспокойтесь о xsl при настройке ответа для просмотра JSP, просто выполните stuff.replaceAll("<", "& lt;").replaceAll(">","& gt; "); Вам больше ничего не нужно; преобразование XSL здесь не требуется. Используйте технологии, когда они необходимы, если только я что-то не упустил.

person Anirudh Vyas    schedule 25.09.2011

Вы можете красиво распечатать JSLT с помощью Pretty Diff по адресу http://prettydiff.com/?m=beautify. сделает именно то, что вам нужно. Рассмотрим следующий пример:

<a>
    <c:out value="<strong>some content</strong>"/>
</a>

Pretty Diff способен распознавать многомерные теги, если вложенный тег заключен в кавычки.

person austincheney    schedule 27.11.2011