OutputStream
をString
オブジェクトに変換したい。 JAXBオブジェクトをマーシャリングした後にOutputStream
オブジェクトが返されます。
私が見つけることができたものから、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(new JAXBElement(
new QName( ""、 "rootTag")、Point.class、new Point(...)));これにより、要素がルート要素として配置され、その後にオブジェクトのコンテンツが続き、が続きます。実際に@XmlRootElementを持ち、ルート要素名を単純に変更するクラスで使用できます。
一見すると、2番目のPoint.classパラメーターは冗長に見えるかもしれませんが、実際には、マーシャラーが(悪名高い)@xsi:typeを生成するかどうかを判断する必要があります。この例では、クラスとインスタンスの両方がPointであるため、@ xsi:typeは表示されません。しかし、それらが異なる場合、あなたはそれを見るでしょう。
これは、Stringや整数などの単純なオブジェクトをマーシャリングするためにも使用できます。
marshaller.marshal(new JAXBElement(
new QName( ""、 "rootTag")、String.class、 "foo bar"));しかし、残念なことに、ListやMapのようなオブジェクトをマーシャリングするために使用することはできません。JAXBの世界では一流の市民として扱われないからです。
見つかりました [〜#〜] here [〜#〜]
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();
}
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を取得してマーシャルするためのクラス内のメソッド編集上記のメソッドは、マーシャルされたxmlとxmlの両方を文字列として出力します。
はい、それを行う方法があります。単に文字列ライターを入力として渡すだけです。作成された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();
}
}
}