执行以下操作所需的Java代码。 我有一个xml作为字符串,例如
<EMpData>
<Employee1>
<Address1>XYZ<Address1/>
<city>DDD<city/>
<Employee1/>
<Employee2>
<Address1><Address1/>
<city><city/>
<Employee2/>
<EMpData/>
我必须检查是否有任何子节点为空或为空或没有值,如果有,那么我必须删除父节点和子节点。所以在上面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());
}
}