修改XML并使用VTD-XML删除旧节点

我有这样的结构:

  Hotel 1 11111-1 11111-2   Hotel 2 22222-1 22222-2  ...  

我想修改每个电话号码,使其具有以下结构:

  11111-1  

我正在提取数字并构建新节点。 但我不知道在什么时候我应该删除旧的Phone1Phone2节点。

我的代码:

 VTDGen vg = new VTDGen(); vg.setDoc(bytes); vg.parse(true); VTDNav vn = vg.getNav(); AutoPilot ap = new AutoPilot(vn); String path = "/Hotels/Hotel"; ap.selectXPath(path); List newNodes = new ArrayList(); int count = 0; // first while-loop: extract all numbers and build new nodes while(ap.evalXPath() != -1) { StringBuilder newNode = new StringBuilder(); for(int i = 1; i <= 2; i++) { // 2 times, because of 2 phone numbers in every hotel VTDNav vn2 = vn.cloneNav(); AutoPilot ap2 = new AutoPilot(vn2); // extract the phone number ap2.selectXPath("Phone" + i); if(ap2.evalXPath() == -1) { continue; } int textIndex = vn2.getText(); if(textIndex == -1) { continue; } String phone = vn2.toString(textIndex); newNode.append("") .append("").append(phone).append("") .append(""); } newNodes.add(count, newNode); count++; } // now it's time to modify the xml XMLModifier xm = new XMLModifier(vn); ap.selectXPath(path); count = 0; // second while-loop: insert the created nodes while(ap.evalXPath() != -1) { xm2.insertBeforeTail(newNodes.get(count).toString()); count++; } VTDNav modifiedVn = xm.outputAndReparse(); 

我将提取和插入分成两个while循环,因为@ vtd-xml-author 在这里说只重新分析一次就更有效了。

我无法找到删除旧Phone节点的位置,并且必须有更好的方法来执行此操作,或者不是吗?