我有以下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);
}
答案 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)的主题。