除了xml到Web浏览器之外还要提供xsl

时间:2014-11-07 00:12:42

标签: java xml spring spring-mvc xslt

我有以下controller method成功将xml文本发送到spring mvc应用中的网络浏览器。问题是它只是将文本发送到浏览器而不是格式化,因此浏览器中的输出只是一堆无格式文本混杂在一起。 如何调整以下controller method,以便它还向用户的网络浏览器发送xsl样式表style.xsl,以便用户中的内容&# 39;网页浏览器已成功格式化为style.xsl

这是我到目前为止所做的:

@RequestMapping(value = "actionName.xml", method = RequestMethod.GET)
public HttpEntity<byte[]> getXml(ModelMap map, HttpServletResponse response) {
    String xml = "";
    String inputpath = "path\\to\\";
    String filename = "somefile.xml";
    String filepluspath = inputpath+filename;
    StreamSource source = new StreamSource(filepluspath);
    try {
        StringWriter writer = new StringWriter();
        StreamResult result = new StreamResult(writer);
        TransformerFactory tFactory = TransformerFactory.newInstance();
        Transformer transformer = tFactory.newTransformer();
        transformer.transform(source,result);
        xml = writer.toString();
    } catch (Exception e) {e.printStackTrace();}
    byte[] documentBody = xml.getBytes();
    HttpHeaders header = new HttpHeaders();
    header.setContentType(new MediaType("application", "xml"));
    header.setContentLength(documentBody.length);
    return new HttpEntity<byte[]>(documentBody, header);
}

1 个答案:

答案 0 :(得分:1)

你问题的直接回答是&#34;你不能&#34; - 无法在单个HTTP响应中发送两个资源。

您可以在要返回的XML文件的标题中包含指向XSLT文件的链接:

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

这将使用户的浏览器尝试下载并将./style.xsl应用于数据,因此您的服务器需要公开它。

UPDATE:样式表的URI可以是任意的;如果您只想在页面上查看时应用样式,则可以使其相对于为文档提供的URI。如果您的@RequestMapping解析为类似http://your-server.com/app/actionName.xml的内容,则可以向您的应用添加静态资源http://your-server.com/app/static/style.xsl并通过

引用它
<?xml-stylesheet href="static/style.xsl" type="text/xsl"?>

或者,您可以将XSLT直接嵌入到XML数据中,而不用担心URL映射,但这是另一个问题(already answered, by the way)的主题。