Визуализировать общий XML как HTML - PullRequest
0 голосов
/ 06 февраля 2012

Я написал веб-сервис (на Java), который в результате создает (довольно сложный) XML-документ.

Я должен вернуть HTML-рендеринг документа, если требуется. Не должно быть фантазии, отображение источника XML с некоторым базовым форматированием, таким как правильное отступление элементов, подойдет.

Как мне это сделать?

Ответы [ 4 ]

2 голосов
/ 06 февраля 2012

Я согласен, XSL будет лучшим подходом. Если вы хотите превратить его во что-то, что на самом деле выглядит как XML, но только внутри HTML, вы можете использовать что-то вроде этого:

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

    <!-- Evaluate Attributes -->
    <xsl:template match="@*">
        <span class="attribute">
            <span class="name">
                <xsl:value-of select="name()"/>
            </span>="<span class="value"><xsl:value-of select="." /></span>"
        </span>
    </xsl:template>


    <!-- Evaluate Elements -->
    <xsl:template match="*" priority="10">
        <div class="element">
            <!-- First, create the opening tag with the attributes -->
            &lt;<span class="name"><xsl:value-of select="name()"/></span><xsl:apply-templates select="@*"/>&gt;
            <!-- Then, add children -->
            <xsl:apply-templates select="node()"/>
            <!-- Finally, add the closing tag -->
            &lt;/<span class="name"><xsl:value-of select="name()"/></span>&gt;
        </div>
    </xsl:template>


    <!-- Just copy everything else (text, comments, etc.) -->
    <xsl:template match="node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

И добавьте немного CSS:

.element{margin-left:4em;font-size:14px;}
.element .name{color:blue;}
.attribute{margin-left:8px}

UPDATE:

<!-- Root node -->
<xsl:template match="/">
    <div class="element">
        &lt;<span class="name"><xsl:value-of select="name()"/></span><xsl:apply-templates select="@*"/>
        <!-- Grab all namespaces and declare them.  distinct-values() is XPath 2.0, however. -->
        <xsl:for-each select="distinct-values(//namespace::*)">
            xmlns:<xsl:value-of select="name()" />="<xsl:value-of select="." />"
        </xsl:for-each>
        &gt;
        <xsl:apply-templates select="node()"/>
        &lt;/<span class="name"><xsl:value-of select="name()"/></span>&gt;
    </div>
</xsl:template>
2 голосов
/ 06 февраля 2012

Вы можете снабдить ваш XML-документ общей таблицей стилей CSS:

<?xml version="1.0" encoding="iso-8859-1" standalone="no" ?>
<?xml-stylesheet type="text/css" href="mystyle.css" ?>
<!-- your main document -->

Или же вы можете предоставить таблицу стилей XSLT, которая преобразует ваш документ в документ HTML:

<?xml version="1.0" encoding="iso-8859-1" standalone="no" ?>
<?xml-stylesheet type="text/xsl" href="transform_to_html.xsl" ?>
<!-- your main document -->

Первый подход может быть более простым и более прямым, поскольку в настоящее время большинство современных браузеров отображают деревья XML-документов произвольного стиля.Недостатком является то, что вам необходимо определить все основные стилистические атрибуты (display, в первую очередь) для каждого типа элемента.

1 голос
/ 06 февраля 2012

Похоже на то, для чего XLST может быть полезно.

Какая среда / библиотеки у вас есть?

0 голосов
/ 06 февраля 2012

Если я понимаю ваш вопрос, вы хотели бы преобразовать ваш XML-документ в HTML. Для этого есть много методов, включая синтаксический анализ XML и генерацию HTML по мере необходимости. Но я рекомендую использовать XSLT. XSLT позволяет легко преобразовывать XML в любой другой XML (включая XHTML).

Ссылки

http://www.w3schools.com/xsl/
http://zvon.org/comp/m/xslt.html
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...