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

 2022-02-13 

REST service: how to produce human readable output using XML + XSLT?

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

因为我想保持格式和内容分开,我不想直接生成 HTML。我虽然使用 xml xslt 可能是一种明智的方法。我可以使用 org.w3c.dom 生成 XML 文档,但我看不出如何将 xslt 附加到它。

这大概是我现在所做的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@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 中出现以下指令:

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

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


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

1
2
3
4
    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。