执行以下操作所需的 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 行。
最佳答案
这是基于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());
}
}
关于Java XML 分句删除节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38518310/