如何将从JSP请求的XML数据格式化为表格

时间:2011-10-20 19:12:27

标签: java xml jsp

我有一个.jsp,用于确定用户可以访问的具体内容。它创建一个XML文件,由前一个jsp读入流中。如何使用读入char数组流的XML数据填充表?

3 个答案:

答案 0 :(得分:3)

有很多方法可以从XML文件中获取HTML表格。最干净的方法之一是将XML解析为可传递给JSP的可重用javabeans集合,以便在呈现时可以使用JSTL <c:forEach>对其进行迭代。 HTML表格。这样每一层都有自己明确的责任。提供JAXB的Java SE对此非常有帮助。

想象一下,您的XML看起来像这样:

<data>
    <entry>
        <key>foo1</key>
        <value>bar1</value>
    </entry>
    <entry>
        <key>foo2</key>
        <value>bar2</value>
    </entry>
    <entry>
        <key>foo3</key>
        <value>bar3</value>
    </entry>
</data>

然后您可以按如下方式创建JAXB javabean:

@XmlRootElement
public class Data {

    @XmlElement(name="entry")
    private List<Entry> entries;

    public List<Entry> getEntries() {
        return entries;
    }

    public static class Entry {

        @XmlElement
        private String key;

        @XmlElement
        private String value;

        public String getKey() {
            return key;
        }

        public String getValue() {
            return value;
        }

    }

}

然后您可以将其转换为List<Entry>,如下所示:

List<Entry> entries = JAXBContext.newInstance(Data.class).createUnmarshaller().unmarshal(inputStream).getEntries();

然后,在将请求转发给JSP之前,您可以让servlet(或JSP?:/)将它存储在请求范围中:

request.setAttribute("entries", entries);

最后,您可以在JSP中迭代它并将其作为HTML表格呈现:

<table>
    <c:forEach items="${entries}" var="entry">
        <tr>
            <td><c:out value="${entry.key}" /></td>
            <td><c:out value="${entry.value}" /></td>
        </tr>
    </c:forEach>
</table>

答案 1 :(得分:2)

您可以使用XSLT按原样设置XML样式,或使用XPath在XML上导航并构建适合您需求的表。

但不确定嵌入该逻辑是否干净,我宁愿在bean中处理,你可以从一个bean中获取最终列表,jsp可以用它来生成表。

http://oreilly.com/catalog/javaxslt/chapter/ch05.html

答案 2 :(得分:0)

那么在你的JSP中除了作为原始XML文档的InputStream之外什么都没有?在我看来,除了学习用于处理XML的Java库之外别无选择。

Google搜索“Java中的XML处理”,您将看到无数可供选择的选项。即使是“将XML转换为您可以在页面的HTML中处理的内容的XSLT”建议,也需要您解析此流。 JAXB API(http://jaxb.java.net/tutorial/section_1_2-Overview.html#Overview)使这一点变得不那么痛苦,允许您将XML文档映射到POJO。

无论如何你看一下,在JSP级别处理它有点代码味道。您应该在其他地方处理XML流,并向您的JSP发送POJO结果以进行演示。

我的2美分值。