Java XML 分句删除节点

标签 java xml-parsing

执行以下操作所需的 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/

相关文章:

python ,xml : how to access the 3rd child by element' name

php - 使用 PHP 解析亚马逊 MWS 产品 API XML

Android 异步任务异常

python - 使用 xml.etree.ElementTree 获取 CDATA

java - 为什么 getResource 给出不同的结果?

java - 什么是具有独特元素(如集合)和获取元素功能的正确Java集合

java - 为什么数组的元素必须在方法内定义?

XPath 将元素中的所有文本作为一个值获取,删除换行符

java - spring MVC HTTP状态404

java - 如何让 G1 打印更多日志详细信息?