当前位置: 首页 > 知识库问答 >
问题:

如何在Java中将Arraylist的内容写入xml文件

韦睿
2023-03-14

这是一个简单的问题。但是我不能调试它。我有类“Adding.java”,它将一些数据添加到ArrayList

public class Adding {

WriteFile ob = new WriteFile();

ArrayList list = new ArrayList();
public void add(){

    list.add("Tim");
    list.add(2333);
    list.add(23);

    list.add("John");
    list.add(423);
    list.add(23);

    ob.writeXmlFile(list);

    } }

另一个类“WriteFile.java”创建了一个xml文件

public class WriteFile {

public void writeXmlFile(ArrayList<Object> list) {

    try {

        DocumentBuilderFactory dFact = DocumentBuilderFactory.newInstance();
        DocumentBuilder build = dFact.newDocumentBuilder();
        Document doc = build.newDocument();

        Element root = doc.createElement("Studentinfo");
        doc.appendChild(root);

        Element Details = doc.createElement("Details");
        root.appendChild(Details);


        for(int i=0; i<list.size(); i ++ ) {

            Element name = doc.createElement("Name");
            name.appendChild(doc.createTextNode(String.valueOf(list.get(i))));
            Details.appendChild(name);

            Element id = doc.createElement("ID");
            id.appendChild(doc.createTextNode(String.valueOf(list.get(i))));
            Details.appendChild(id);


            Element mmi = doc.createElement("Age");
            mmi.appendChild(doc.createTextNode(String.valueOf(list.get(i))));
            Details.appendChild(mmi);

        }


         // Save the document to the disk file
        TransformerFactory tranFactory = TransformerFactory.newInstance();
        Transformer aTransformer = tranFactory.newTransformer();

        // format the XML nicely
        aTransformer.setOutputProperty(OutputKeys.ENCODING, "ISO-8859-1");

        aTransformer.setOutputProperty(
                "{http://xml.apache.org/xslt}indent-amount", "4");
        aTransformer.setOutputProperty(OutputKeys.INDENT, "yes");



        DOMSource source = new DOMSource(doc);
        try {
            FileWriter fos = new FileWriter("/home/ros.xml");
            StreamResult result = new StreamResult(fos);
            aTransformer.transform(source, result);

        } catch (IOException e) {

            e.printStackTrace();
        }



    } catch (TransformerException ex) {
        System.out.println("Error outputting document");

    } catch (ParserConfigurationException ex) {
        System.out.println("Error building document");
    }

当我执行此操作时,我得到以下输出

  <?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
       <Studentinfo>
             <Details>
                  <name>Tim</name>
                  <Id>Tim</Id>
                  <age>Tim</age>
                  <name>2333</name>
                  <Id>2333</Id>
                  <age>2333</age>
                  ..... 
              </Details>
        </studentinfo>

等等但我希望最终输出是这种形式的

<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
       <Studentinfo>
             <Details>
                  <name>Tim</name>
                  <Id>2333</Id>
                  <age>23</age>

                  <name>John</name>
                  <Id>423</Id>
                  <age>2333</age>
                  <size>23</size>
             </Details>
        </studentinfo>

“for”循环在“list”元素上迭代有什么问题吗。感谢您的帮助。提前感谢

共有3个答案

郁博学
2023-03-14

下面是一个清晰XML文件的示例:

Element root = doc.createElement("RectanglesInfo");
 doc.appendChild(root);

for(int i=0; i<rectangles.size(); i ++ ) {

    Element rectangle = doc.createElement("Rectangle");
    root.appendChild(rectangle);


    Element width = doc.createElement("width");
 width.appendChild(doc.createTextNode(Double.toString(rectangles.get(i).getWidth())));
    rectangle.appendChild(width);

    Element height = doc.createElement("height");
    height.appendChild(doc.createTextNode(Double.toString(rectangles.get(i).getHeight())));
    rectangle.appendChild(height);

}

结果会是这样的:

<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
<RectanglesInfo>
    <Rectangle>
        <width>89.0</width>
        <height>85.0</height>
    </Rectangle>
    <Rectangle>
        <width>205.0</width>
        <height>212.0</height>
    </Rectangle>
</RectanglesInfo>

因此,您可以添加学生的信息,而不是矩形。

何涵育
2023-03-14

您需要以3的增量遍历列表:

    for(int i=0; i<list.size() - 2; i += 3 ) {

        Element name = doc.createElement("Name");
        name.appendChild(doc.createTextNode(String.valueOf(list.get(i))));
        Details.appendChild(name);

        Element id = doc.createElement("ID");
        id.appendChild(doc.createTextNode(String.valueOf(list.get(i + 1))));
        Details.appendChild(id);


        Element mmi = doc.createElement("Age");
        mmi.appendChild(doc.createTextNode(String.valueOf(list.get(i + 2))));
        Details.appendChild(mmi);

    }

但是,最好在列表中存储自定义类的对象,并使用名称、id和年龄的专用字段。

林正平
2023-03-14

你为什么不在你的列表中存储学生对象,每个对象都有一个名字、一个ID和一个年龄?这将更易于维护,也更容易编程?

目前,您使用列表中的相同索引来查找这三个属性。您需要在循环中按3步进行迭代,并获得元素i、i 1和i 2以使其工作。

list.add(new Student("Tim", 2333, 23));
list.add(new Student("John", 423, 23));

...

for (Student student : studentList) {
    ...
    name.appendChild(doc.createTextNode(student.getName()));
    ...
    id.appendChild(doc.createTextNode(Integer.toString(student.getId())));
    ...
    age.appendChild(doc.createTextNode(Integer.toString(student.getAge())));
}
 类似资料:
  • 问题内容: 我试图将XML 存储到XML文件中,以便稍后可以检索信息,然后将其显示回控制台。 有人可以告诉我最有效的方法吗? 编辑: 这是我要写入外​​部文件的内容 这一切都创建了一个Bank用户,该用户被扔到中,然后我想存储他们的信息,以便稍后返回并重新显示。 问题答案: //根据需要修改下面的类 //下面的类实际写了

  • } PS,arrayList中的内容插入到程序中的某个点,因此arrayList不是空的。

  • 问题内容: 用最简单的方法,在java中如何创建一个文件并写入内容? 问题答案: 创建一个文本文件: 创建一个二进制文件: Java 7+用户可以使用Files该类来写入文件: 创建一个文本文件: 创建一个二进制文件:

  • 我必须写一个程序: 提示用户输入输入文件的名称, 从输入文件中读取数据,并将有关汽车的信息存储在汽车对象数组列表中, 将数组列表中未排序的数据打印到屏幕上,如下所示: 我想不出前三步该怎么做。 我也有两个类,与这个项目,并将添加他们,如果需要/需要。因此,基本上只需要帮助了解如何从用户那里读取文本文件,将文本文件的内容添加到ArrayList中,并以格式化的方式打印出ArrayList的内容(我的

  • 问题内容: 假设我有一个名为abhishek.txt的文件,其中包含以下行 我是,你叫什么名字。 现在我要写 阿比舍克 在“我是”之后,就像我是Abhishek,..如何直接在此特定位置书写内容。 问题答案: 您不能将数据插入文件中。您可以使用覆盖特定位置的数据。但是,插入操作需要更改其后的所有数据。对于您的情况,请尝试以下类似方法:

  • 问题内容: 我想用 用该文件夹的内容制作一个ArrayList。 我对缓冲的读者不是很好,所以请告诉我是否更好。 这是我到目前为止的代码: 谢谢,obiedog 问题答案: 最简单的方法是: 如果想要的是名称列表: