首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使JAXB生成XML处理指令

问使JAXB生成XML处理指令
EN

Stack Overflow用户
提问于 2010-01-28 16:42:01
回答 4查看 7.7K关注 0票数 8

我使用JAXB动态生成XML。

现在,我想使用XSL将其转换为HTML。如何才能包含

代码语言:javascript
复制
<?xml-stylesheet type="text/xsl" href=""> 

在动态生成的XML中?

EN

回答 4

Stack Overflow用户

发布于 2013-09-27 00:09:39

这里的所有解决方案都相当丑陋和冗长。只需在Mashaller对象中设置指定附加标头的行即可。

代码语言:javascript
复制
Marshaller jaxbMarshaller = ...
jaxbMarshaller.setProperty("com.sun.xml.bind.xmlHeaders", 
    "<?xml-stylesheet type='text/xsl' href='nameoffile.xsl' ?>");

本例将使用样式表将XML对象输出到文件中,并很好地格式化元素以便于阅读。对象myXmlObject属于MyXmlClass类,它将被写入file,并由xslUrl提供的样式表格式化

代码语言:javascript
复制
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,如下所示。

代码语言:javascript
复制
Marshaller jaxbMarshaller = ...
jaxbMarshaller.setProperty("com.sun.xml.internal.bind.xmlHeaders", 
    "<?xml-stylesheet type='text/xsl' href='nameoffile.xsl' ?>");
票数 11
EN

Stack Overflow用户

发布于 2010-01-31 23:33:08

您可以使用StringWriter首先将样式表信息写入其中,然后将对象编组到其中:

代码语言:javascript
复制
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。

票数 4
EN

Stack Overflow用户

发布于 2012-10-31 01:58:49

了解如何在ReXSL XSL/JAXB/JAX-RS框架的一部分rexsl-core中完成此操作:XslResolver

代码语言:javascript
复制
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);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2153219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档