REST服务:如何使用XML + XSLT生成人类可读的输出?

时间:2012-12-03 09:56:02

标签: java xml xslt

我使用Jersey在GlassFish中实现了REST服务。我有使用JSON输出的服务,现在我想提供一些人类可读的输出。 JSON输出中缺少的最重要的一点是我希望统计信息中的某些字段转换为可点击的链接,这些链接会显示相关的统计信息(使用另一个REST调用)。

由于我希望将格式和内容分开,我不想直接生成HTML。我虽然使用xml + xslt可能是一个明智的方法。我可以使用org.w3c.dom来生成XML文档,但我认为没有办法将xslt附加到它上面。

这是我现在所做的大概:

@GET
@Path("history_id")
@Produces("application/xml")
public Document history(@QueryParam("id") String idText) throws ParserConfigurationException
{
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder docBuilder = factory.newDocumentBuilder();
        Document doc = docBuilder.newDocument();
        Element root = doc.createElement("root");
        doc.appendChild(root);
        Element el = doc.createElement(name);
        el.setTextContent(value);
        root.appendChild(el);
        return doc;

我希望在生成的XML中出现以下指令:

<?xml-stylesheet type="text/xsl" href="history.xsl"?">

如何指定要附加到XML的xslt?或者我的方法可能从根本上是错误的,这通常以其他方式完成?

1 个答案:

答案 0 :(得分:3)

“指令”在XML世界中被称为“处理指令”。您可以使用DOM API创建一个:

    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder docBuilder = factory.newDocumentBuilder();
    Document doc = docBuilder.newDocument();
    doc.appendChild(doc.createProcessingInstruction("xml-stylesheet", "type=\"text/xsl\" href=\"history.xsl\""));

然后,如果您将XML文档发送到支持客户端XSLT的浏览器/用户代理,它将把样式表应用于XML。