将通用XML呈现为HTML

时间:2012-02-05 23:41:09

标签: java html xml rendering

我编写了一个Web服务(用Java),它产生了一个(相当复杂的)XML文档。

如果需要,我需要返回文档的HTML呈现。不一定要花哨,用一些基本的格式显示XML源,比如正确缩进元素就可以了。

我该怎么做?

4 个答案:

答案 0 :(得分:2)

您可以使用通用CSS样式表配置XML文档:

<?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 :(得分:2)

我同意,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}

更新:

<!-- 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 :(得分:1)

听起来像XLST可能有用的东西。

您有哪些环境/图书馆?

答案 3 :(得分:0)

如果我理解您的问题,您希望将XML文档转换为HTML。有许多技术可以做到这一点,包括解析XML并生成HTML。但我建议使用XSLT。 XSLT可以轻松地将XML转换为任何其他XML(包括XHTML)。

参考

http://www.w3schools.com/xsl/
http://zvon.org/comp/m/xslt.html