从XML添加和删除元素 - DOM解析器 - Java

时间:2015-06-12 20:52:51

标签: java xml parsing dom

XML

<company> <employee>
<age> 12 </age>
  <name> name1</name>
</employee> 
 <employee>
 <age> 12 </age>
  <name> name1</name>
  <status>active</status>
</employee>

<employee>
 <age> 12 </age>
  <name> name1</name>
</employee></company>

Java代码:

employeeList nList = doc.getElementsByTagName("employee");
     for (int i = 0; i < nList.getLength(); i++) {
            Node employeeNode= nList.item(i);
            employeeList employeeList = nNode.getChildNodes();
            Node insertNode=null;
            System.out.println(" Processing the " + i + " Portlet Tag");
                //Inner Loop to Process each Portlet tags   
                 int employeeList_Count=employeeList.getLength();

                 for (int j = 0; j < employeeList_Count; j++) {
                      Node childNode = employeeList.item(j);


                      if( childNode.getNodeName()) == "status")  {
                               removeNode(nNode,childNode);      //   assume remove functionality perfectly works (actually it is!!)
                      }
                      if ( j == employeeList_Count - 2)  // goes into loop during last node
                      {

                          Element insertElement = (Element)nNode;

                          insertElement.insertBefore(employee_status_element,  insertElement.getFirstChild().getNextSibling());  //employee_status_element,   this is the element should be inserted in all employee tags


                           doc.getDocumentElement().normalize();
                           updateXml2File(doc, xmlDTDPath , outputFile);    // functionality to write the xml into file
                      }

                }



          }

每次运行此代码时,只有最后一名员工(满分3分)才会更新元素&#34; status&#34; ......

这是输出就像

第一个循环完成       tag位于第一个employee标签中..它在第二个循环中推到第二个。最后,只有最后一个元素具有status元素。

真的很痛苦......非常感谢你的指导。

1 个答案:

答案 0 :(得分:0)

我已经解决了这个问题。这是愚蠢的,但是在将代码加工几个小时之后就被吓坏了。

逻辑之前是这样的

Create Element
  Loop for Multiple Employees
        Attach/Append the Element to Employees

问题:元素仅附加到循环中的最后一个雇员节点。

原因:由于我在循环之前只创建了一个元素..我无法将它附加到多个员工节点

解决方案:

现在我将元素创建移动到循环中然后它开始工作。

  Loop for Multiple Employees
        Create Element   
        Attach/Append the Element to Employees

我的问题和代码有点乱,我试图尽可能地纠正它,使其简单但不能......感谢每一个试图解决这个问题的人。