【问题标题】:Writing data from objects in java into a xml file将java中对象的数据写入xml文件
【发布时间】:2012-09-20 19:37:25
【问题描述】:

我有一段代码如下:

    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


【解决方案1】:

我已经多次使用XStream

【讨论】:

    【解决方案2】:

    您还可以使用序列化和 XML-Parser(例如 DOM)。如果您创建一个 XML 文档,那么您可以使用 XPath 进行查询。

    我也会考虑使用http://simple.sourceforge.net/

    【讨论】:

      【解决方案3】:

      我猜你正在寻找 java-xml 绑定。您可以 JAXB 绑定和编组。 示例请查看链接http://www.mkyong.com/java/jaxb-hello-world-example/

      【讨论】:

        【解决方案4】:

        查看链接中的代码,我为我的代码实现了它。代码如下。我只能为一个对象编写 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();
        }
        

        【讨论】:

          【解决方案5】:

          使用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>
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-03-01
            • 1970-01-01
            • 2015-12-05
            • 1970-01-01
            相关资源
            最近更新 更多