我想将OutputStream
转换为String
个对象。我在编组JAXB对象后返回了OutputStream
对象。
答案 0 :(得分:93)
对jaxb不太熟悉,从我能够找到的你可以使用
转换成字符串public String asString(JAXBContext pContext,
Object pObject)
throws
JAXBException {
java.io.StringWriter sw = new StringWriter();
Marshaller marshaller = pContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
marshaller.marshal(pObject, sw);
return sw.toString();
}
但我不确定是否有搅拌物。还在寻找。
**编辑
编组非元素
另一个常见的用例是你 有一个没有的对象 @XmlRootElement就可以了。 JAXB允许你 像这样编组:
marshaller.marshal(新的JAXBElement(
新 QName的( “”, “rootTag”),Point.class,新 点(...)));这将元素作为 根元素,后跟内容 然后,对象。您 实际上可以将它与一个类一起使用 有@XmlRootElement,就这么简单 重命名根元素名称。
乍一看第二眼 Point.class参数可能看起来 多余的,但实际上是必要的 确定编组人员是否会 生产(臭名昭着)@xsi:类型。在这 例如,班级和班级 实例是Point,所以你不会看到 @xsi:类型。但如果他们不同, 你会看到的。这也可以用来编组a 简单的对象,如String或 整数。
marshaller.marshal(新的JAXBElement(
新 QName的( “”, “rootTag”),String.class,“富 栏“));但遗憾的是它不能用来 像列表或地图那样编组对象 他们不是一流的 JAXB世界的公民。
找到HERE
答案 1 :(得分:7)
StringWriter sw = new StringWriter();
com.integra.xml.Integracao integracao = new Integracao();
integracao.add(...);
try {
JAXBContext context = JAXBContext.newInstance("com.integra.xml");
Marshaller marshaller = context.createMarshaller();
marshaller.marshal(integracao, sw );
System.out.println(sw.toString());
} catch (JAXBException e) {
e.printStackTrace();
}
答案 2 :(得分:1)
public String readFile(String pathname) throws IOException {
File file = new File(pathname);
StringBuilder fileContents = new StringBuilder((int) file.length());
Scanner scanner = new Scanner(file);
String lineSeparator = System.getProperty("line.separator");
try {
while (scanner.hasNextLine()) {
fileContents.append(scanner.nextLine() + lineSeparator);
}
return fileContents.toString();
}
finally {
scanner.close();
}
}
处理XML并将其转换为字符串的方法。
JAXBContext jc = JAXBContext.newInstance(ClassMatchingStartofXMLTags.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
//store filepath to be used
String filePath = "YourXMLFile.xml";
File xmlFile = new File(filePath);
//Set up xml Marshaller
ClassMatchingStartofXMLTags xmlMarshaller = (ClassMatchingStartofXMLTags) unmarshaller.unmarshal(xmlFileEdit);
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
// Use marshall to output the contents of the xml file
System.out.println("Marshalled XML\n");
marshaller.marshal(xmlMarshaller, System.out);
//Use Readfile method to convert the XML to a string and output the results
System.out.println("\nXML to String");
String strFile = ReadFile(xmlFile)
System.out.println(strFile);
类中用于获取XML和Marshall的方法 编辑上述方法将输出编组的xml以及xml作为字符串。
答案 3 :(得分:0)
是的,有办法做到这一点:只需将String writer作为输入传递给它。因此创建的xml将写入它
public void saveSettings() throws IOException {
FileOutputStream os = null;
//Declare a StringWriter to which the output has to go
StringWriter sw = new StringWriter();
try {
Answer ans1=new Answer(101,"java is a programming language","ravi");
Answer ans2=new Answer(102,"java is a platform","john");
ArrayList<Answer> list=new ArrayList<Answer>();
list.add(ans1);
list.add(ans2);
settings=new Question(1,"What is java?",list);
os = new FileOutputStream(FILE_NAME);
this.marshaller.marshal(settings, new StreamResult(sw));
System.out.println(sw.toString());
new File(FILE_NAME).delete();
} finally {
if (os != null) {
os.close();
}
}
}