【问题标题】:How to append an existing XML file using DOM without overwriting the existing data? in java如何使用 DOM 追加现有 XML 文件而不覆盖现有数据?在java中
【发布时间】:2013-06-19 10:36:14
【问题描述】:

我对如何将 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

我也可以轻松解析和更新,但我不明白如何附加以前的数据,请帮助我

【问题讨论】:

    标签: java xml dom append


    【解决方案1】:

    这很容易。假设您想将新的 Employees 附加到您的 XML 中。无需创建新根,您只需使用 getElementsByName() 即可找到它

    // 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()

    编辑:(已添加示例代码)
    您不能有两个根节点,即两个 <Employees> 标记作为根。那是无效的 XML。您需要的是一个根 <Employees> 标记内的多个 <Employee> 标记。此外,坚持骆驼或大写。我使用大写字母来保持一致性。

    // 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;
    }
    

    【讨论】:

    • @Durgaprasad:邮政编码、XML 或任何其他结构化文本作为对您问题的编辑,而不是在评论中。以这种方式未格式化时无法读取。
    • 你不能有两个根节点,即两个<Employees>标签。那是无效的 XML。检查我添加的示例代码。应该让你开始。
    • 感谢您提供宝贵的信息,实际上该评论输入错误
    猜你喜欢
    • 2012-07-24
    • 1970-01-01
    • 2018-03-05
    • 1970-01-01
    • 2021-09-18
    • 2015-06-13
    • 2012-04-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多