[英]Writing XML Data to OutputStream with Mutable objects in java
[英]Writing data from objects in java into a xml file
我有一段代碼如下:
Person person1 = new Person();
person1.setName("abc");
person1.setAge(23);
Person person2 = new Person();
person2.setName("xyz");
person2.setAge(32);
它需要在xml文件中重新表示為:
<Person>
<person1>
<name>abc</name>
<age>23</age>
</person1>
<person2>
<name>abc</name>
<age>23</age>
</person2>
</Person>
我該怎么做?
我猜您正在尋找java-xml綁定。 您可以JAXB綁定和編組。 請檢查鏈接http://www.mkyong.com/java/jaxb-hello-world-example/以獲取示例。
在您的鏈接中檢查代碼,我為我的代碼實現了它。 代碼如下。 我只能為一個對象寫xml數據,如果循環,它只會寫最后一個對象。 因此,當我嘗試以附加模式使用文件時,它停止運行:
try {
FileOutputStream file = new FileOutputStream("file.xml", true);
JAXBContext jaxbContext = JAXBContext.newInstance(NeuronNode.class);
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
// output pretty printed
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
for(int i=0; i<neuronNodes.length; i++)
{
jaxbMarshaller.marshal(neuronNodes[i], file);
jaxbMarshaller.marshal(neuronNodes[i], System.out);
}
} catch (JAXBException e | IOException e) {
e.printStackTrace();
}
您還可以使用序列化和XML解析器(例如DOM)。 如果創建XML文檔,則可以使用XPath進行查詢。
我已經多次使用XStream 。
使用Jackson庫和XMLMapper方法解決了這個問題。 這是相同的代碼。
**MainClass.java:-**
import java.io.IOException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
public class MainClass {
public static void main(String[] args) throws IOException {
String xmlString = " <Person>\r\n" + " <person1>\r\n" + "
<name>abc</name>\r\n"
+ " <age>23</age>\r\n" + " </person1>\r\n" + "
<person2>\r\n"
+ " <name>abc</name>\r\n" + " <age>23</age>\r\n" + "
</person2>\r\n"
+ " </Person>";
ObjectMapper xmlMapper = new XmlMapper();
xmlMapper.enable(SerializationFeature.INDENT_OUTPUT);
Person1 person1 = new Person1();
person1.setName("abc");
person1.setAge("23");
Person2 person2 = new Person2();
person2.setName("xyz");
person2.setAge("32");
Person person = new Person();
person.setPerson1(person1);
person.setPerson2(person2);
String XMLStr = xmlMapper.writeValueAsString(person);
System.out.println(XMLStr);
} }
**Person.java:-**
public class Person {
Person1 Person1Object;
Person2 Person2Object;
// Getter Methods
public Person1 getPerson1() {
return Person1Object;
}
public Person2 getPerson2() {
return Person2Object;
}
// Setter Methods
public void setPerson1(Person1 person1Object) {
this.Person1Object = person1Object;
}
public void setPerson2(Person2 person2Object) {
this.Person2Object = person2Object;
} }
**Person1.java:-**
public class Person1 {
private String name;
private String age;
// Getter Methods
public String getName() {
return name;
}
public String getAge() {
return age;
}
// Setter Methods
public void setName(String name) {
this.name = name;
}
public void setAge(String age) {
this.age = age;
} }
**Person2.java:-**
public class Person2 {
private String name;
private String age;
// Getter Methods
public String getName() {
return name;
}
public String getAge() {
return age;
}
// Setter Methods
public void setName(String name) {
this.name = name;
}
public void setAge(String age) {
this.age = age;
} }
**OUTPUT:-**
<Person>
<person1>
<name>abc</name>
<age>23</age>
</person1>
<person2>
<name>xyz</name>
<age>32</age>
</person2>
</Person>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.