1

XMLデータを既存のデータに追加する方法について非常に混乱しています。私のコードは次のようなものです。

 Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();//db.newDocument();//create document

        Element root = doc.createElement("Employees");//cretae Elements
        doc.appendChild(root);

        Comment cmt = doc.createComment("Employee Details");//Add comment to xml
        root.appendChild(cmt);

        Element employee = doc.createElement("employee");//create Element
        //employee.appendChild(doc.)
        root.appendChild(employee);

        Attr genderAttr = doc.createAttribute("Gender");
        System.out.print("Enter your gender :");
        String gend = br.readLine();
        genderAttr.setValue(gend);
        employee.setAttributeNode(genderAttr);

        System.out.print("Enter first name:");
        String child = br.readLine();
        Element FName = doc.createElement("firstName");
        FName.appendChild(doc.createTextNode(child));//set xml text
        employee.appendChild(FName);

        System.out.print("Enter last name:");
        String child1 = br.readLine();
        Element LName = doc.createElement("lastName");            
        LName.appendChild(doc.createTextNode(child1));
        employee.appendChild(LName);

        //root.appendChild(employee);
        //doc.appendChild(root);

        //to write on file/screen
        TransformerFactory tf = TransformerFactory.newInstance();
        Transformer tr = tf.newTransformer();
        tr.setOutputProperty(OutputKeys.INDENT, "yes");
        DOMSource source = new DOMSource(doc);//source             
        //File shopOrder = new File("src"+File.separator+"xmlparsing"+File.separator+"xmlParse1.xml");//get the file
        StreamResult res = new StreamResult(new File("src"+File.separator+"xmlparsing"+File.separator+"xmlParse1.xml"));//Destination
        tr.transform(source, res);//to write on file

また、簡単に解析して更新することもできますが、以前のデータを追加する方法がわかりません助けてください

4

1 に答える 1

4

とても簡単です。Employeesたとえば、 XML にnew を追加したいとします。getElementsByName()新しいルートを作成する代わりに、 likeを使用して単純に見つけることができます

// find root
NodeList rootList = doc.getElementsByName("Employees");
Node root = rootList.item(0);

Element employee = doc.createElement("employee"); //create new Element
root.appendChild(employee); // append as before

Document.getElementById()要素に識別子が割り当てられている場合に使用できるメソッドもあります。ツリーの奥深くに何かを挿入するXPathには、最初にノードを見つけてからappend()、通常どおりに使用します。

EDIT : (サンプル コードを追加) 2 つのルート ノード、つまり 2 つのタグをルートとして
持つことはできません<Employees>これは無効な XML です。必要なのは、<Employee>1 つのルート タグ内<Employees>です。また、キャメルまたは大文字のいずれかに固執します。一貫性のために大文字を使用しています。

// find root
NodeList rootList = doc.getElementsByName("Employees");
Node root = rootList.item(0);

// append using a helper method
root.appendChild(createEmployee(doc, "male", "John", "Doe"));

public Element createEmployee(Document doc,
                              String gender, String fname, String lname) {
  // create new Employee
  Element employee = doc.createElement("Employee");
  employee.setAttribute("gender", gender);

  // create child nodes
  Element firstName = doc.createElement("FirstName");
  firstName.appendChild(doc.createTextNode(fname));

  Element lastName = doc.createElement("LastName");
  lastName.appendChild(doc.createTextNode(lname));

  // append and return
  employee.appendChild(firstName);
  employee.appendChild(lastName);

  return employee;
}
于 2013-06-22T10:59:11.843 に答える