我正在使用JAXB動態生成XML。使JAXB生成XML處理指令
現在,我想使用XSL將其轉換爲HTML。我如何能包括
<?xml-stylesheet type="text/xsl" href="">
在動態生成的XML?
我正在使用JAXB動態生成XML。使JAXB生成XML處理指令
現在,我想使用XSL將其轉換爲HTML。我如何能包括
<?xml-stylesheet type="text/xsl" href="">
在動態生成的XML?
你可以使用的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。
看看它是如何在做rexsl-core,ReXSL XSL/JAXB/JAX-RS框架的一部分: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);
JAXBContext jaxbContext;
try {
jaxbContext = JAXBContext.newInstance(new Class[] {SomeObject.class});
StringWriter writer = new StringWriter();
writer.write("<?xml version='1.0'?>");
writer.write("\n");
writer.write("<?xml-stylesheet type=\"text/xsl\" href=\"\">");
writer.write("\n");
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
jaxbMarshaller.marshal(someobject, writer);
}
請嘗試用文字回答,而不是用代碼回答。既然你這麼晚回答,你的答案與其他答案有什麼不同? – 2012-11-05 13:38:15
這似乎是一種解決方法。 – 2017-03-07 13:47:58
這裏所有的解決方案是很醜陋和冗長。只需在指定附加標頭的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);
這是實現它的優雅方式,但是如果你正在對'File'(例如)執行'marshal()',它將不起作用。它需要輸出爲Writer或Stream。一旦你意識到這一點,將'File'包裝在'FileWriter'中應該很簡單。 – 2013-11-04 15:11:42
@KevinSadler請隨時更新我的答案! – 2014-05-06 10:43:03
@KevinSadler您的修改已被社區拒絕。我添加了編輯,但它已經很糟糕。請美化它,以便編輯將與您聯繫!謝謝! – 2014-05-13 07:46:52
你的意思是你想包括在JAXB輸出樣式表的參考? – skaffman 2010-01-28 08:45:01