2016-07-22 6 views
1

以下の操作を行うためにJavaコードが必要です。文字列としてXMLを持つ イムは、たとえばJava XML pharsing削除ノード

<EMpData> 
<Employee1> 
    <Address1>XYZ<Address1/> 
    <city>DDD<city/> 
<Employee1/> 
<Employee2> 
    <Address1><Address1/> 
    <city><city/> 
<Employee2/> 
<EMpData/> 

のために、私はそれがあるならば、私は親と子ノードを削除する必要があり、すべての子ノードが空またはnull値の有無にかかわらずであるかどうかを確認する必要があります。だから上のemployee2は空です、私は以下の出力をしたいです

<EMpData> 
<Employee1> 
    <Address1>XYZ<Address1/> 
    <city>DDD<city/> 
<Employee1/> 
<EMpData/> 

これを行うための最良の効率的な方法を提案してください。実際のXMLは約500〜700行になります。ここで

+0

...ですか? –

答えて

0

は、XPathとVTD-XMLに基づいたコードは、あなたが何をしようとしなかった

import java.io.*; 
import com.ximpleware.*; 

public class removeNode2 { 
    public static void main(String s[]) throws VTDException, IOException{ 
     VTDGen vg = new VTDGen(); 
     String xml = "<EMpData>\n"+ 
       "<Employee1>\n"+ 
       "<Address1>XYZ</Address1>\n"+ 
       "<city>DDD</city>\n"+ 
       "</Employee1>\n"+ 
       "<Employee2>\n"+ 
       "<Address1></Address1>\n"+ 
       "<city></city>\n"+ 
       "</Employee2>\n"+ 
       "</EMpData>\n"; 
     vg.setDoc(xml.getBytes()); 
     vg.parse(false); 
     VTDNav vn = vg.getNav(); 
     AutoPilot ap = new AutoPilot(vn); 
     XMLModifier xm = new XMLModifier(vn); 
     ap.selectXPath("/EMpData/*[string-length(*/text())=0]"); 

     int i=0; 
     while((i=ap.evalXPath())!=-1){ 
      //System.out.println(" -====>"+ap2.evalXPathToBoolean()); 
      xm.remove(); 
     } 
     ByteArrayOutputStream baos= new ByteArrayOutputStream(); 
     xm.output(baos); 
     System.out.println(baos.toString()); 
    } 
} 
関連する問題