我使用JAXB动态生成XML。
现在,我想使用XSL将其转换为HTML。如何才能包含
<?xml-stylesheet type="text/xsl" href=""> 在动态生成的XML中?
发布于 2013-09-27 00:09:39
这里的所有解决方案都相当丑陋和冗长。只需在Mashaller对象中设置指定附加标头的行即可。
Marshaller jaxbMarshaller = ...
jaxbMarshaller.setProperty("com.sun.xml.bind.xmlHeaders",
"<?xml-stylesheet type='text/xsl' href='nameoffile.xsl' ?>");本例将使用样式表将XML对象输出到文件中,并很好地格式化元素以便于阅读。对象myXmlObject属于MyXmlClass类,它将被写入file,并由xslUrl提供的样式表格式化
JAXBContext context = JAXBContext.newInstance(MyXmlClass.class);
Marshaller marshaller = context.createMarshaller();
//Need to use a Writer to marshal with the XSL
FileWriter fw = new FileWriter(file);
//Do this or else the XML is all one line and not human friendly...
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
marshaller.setProperty("com.sun.xml.bind.xmlHeaders",
"<?xml-stylesheet type='text/xsl' href=\"" +
xslUrl +
"\" ?>");
marshaller.marshal(myXmlObject, fw);更新
在最近的JAXB版本中,我们需要使用属性键作为com.sun.xml.internal.bind.xmlHeaders,如下所示。
Marshaller jaxbMarshaller = ...
jaxbMarshaller.setProperty("com.sun.xml.internal.bind.xmlHeaders",
"<?xml-stylesheet type='text/xsl' href='nameoffile.xsl' ?>");发布于 2010-01-31 23:33:08
您可以使用StringWriter首先将样式表信息写入其中,然后将对象编组到其中:
StringWriter writer = new StringWriter();
//add processing instructions "by hand" with escaped quotation marks
//or single marks
writer.println("<?xml version='1.0'?>");
writer.println("<?xml-stylesheet type=\"text/xsl\" href=\"\">");
//create and configure marshaller to leave out processing instructions
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
//marshal to the StringWriter
marshaller.marshal(someObject,writer);
//get the string representation
String str = writer.toString();当然,您也可以直接打印到您想要的任何其他输出流,例如文件或Sytstem.out。
发布于 2012-10-31 01:58:49
了解如何在ReXSL XSL/JAXB/JAX-RS框架的一部分rexsl-core中完成此操作:XslResolver
final String header = String.format(
"\n<?xml-stylesheet type='text/xsl' href='%s'?>",
StringEscapeUtils.escapeXml("my-stylesheet.xsl")
);
marshaller.setProperty("com.sun.xml.bind.xmlHeaders", header);https://stackoverflow.com/questions/2153219
复制相似问题