1

それは単純な問題です。しかし、私はそれをデバッグすることができません。ArrayListにデータを追加するクラス「Adding.java」があります

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);

    } }

xmlファイルを作成する別のクラス「WriteFile.java」

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>

「list」要素を反復処理する「for」ループに問題はありますか?。どんな助けでも大歓迎です。前もって感謝します

4

3 に答える 3

2

それぞれに名前、ID、年齢が記載されたStudentオブジェクトをリストに保存してみませんか?これははるかに保守しやすく、プログラミングが簡単でしょうか?

現時点では、リスト内の同じインデックスを使用して3つのプロパティを検索しています。ループ内で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())));
}
于 2012-04-19T11:30:27.420 に答える
1

リストを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、および年齢専用のフィールドを使用して、カスタムクラスのオブジェクトをリストに保存することをお勧めします。

于 2012-04-19T11:29:30.480 に答える
0

クリア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>

したがって、長方形の代わりに、生徒の情報を追加できます。

于 2017-09-14T18:32:53.240 に答える