如何使用 Java EE 从 xsl 输出中读取媒体类型属性?

How do I read the media-type attribute from xsl output using Java EE?

我使用 XSLT 将 XML 转换为其他内容,在本例中为 JSON。我使用 <xsl:output method="text" media-type="application/json" encoding="UTF-8"/> 标签设置 MIME。

我使用 saxon9 将 XML 转换为 JSON。

Transformer transformer = tFactory.newTransformer(new StreamSource(xslUrl));
ByteArrayInputStream xmlStream = new ByteArrayInputStream(xml.getBytes());
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dataOut = new DataOutputStream(baos);
transformer.transform(new StreamSource(xmlStream), new StreamResult(new OutputStreamWriter(dataOut)));
String output = baos.toString();

如何才能将 MIME 也阅读为 "application/json"?

不一定。例如,如果输出写入文件存储中的文件,那么大多数操作系统不允许在文件元数据中捕获媒体类型,因此它会丢失。

唯一的例外是将输出写入确实捕获媒体类型的目标,例如 HTTP 响应。在这种情况下,幸运的话,媒体类型将在 HTTP headers.

中找到

当然,ByteArrayOutputStream 不会捕获有关媒体类型的任何信息。

这是从 xsl:output media_type 中获取 MIME 的调用方法。

String mime = transformer.getOutputProperty(OutputKeys.MEDIA_TYPE);

然后您可以采取相应的行动,在我的例子中是为 HttpServletResponse 设置内容类型。