【问题标题】:VTD XMLRemoving the spaces after Removing the ElementVTD XML删除元素后删除空格
【发布时间】:2016-08-26 14:40:39
【问题描述】:

我们的应用程序正在使用 VTD XML。您能帮我们解决应用程序中的问题吗?

问题是: 输入xml:

    <root>
           <name>suresh</name>
           <address>Address</address>
    </root>


    output xml:

    <root>

          <address>Address</address>
    </root>

    But i want the output to be:

    <root>
          <address>Address</address>
    </root>

当我使用 xmlmodifier 删除元素时,它会为删除的元素创建一个空白空间(新行)。

是否有可能删除该 vtdxml?

【问题讨论】:

    标签: xml element spaces removing-whitespace vtd-xml


    【解决方案1】:

    是的,在 2.12 版本中,VTDNav 中有一个叫做 expandWhiteSpace 的方法,它的工作原理如下

    public final long expandWhiteSpaces(long l)
    

    v2.12 中的新功能此方法将采用段描述符并返回一个新描述符,该描述符包括输入段周围的所有前导和尾随空格它对 CDATA 没有影响典型用法是 'expandWhiteSpaces(getElementFragment() )' 参数: l - 段的高 32 位长度,段的低 32 位偏移量,单位为字节偏移量 回报: 一个长的 64 位段描述符 抛出: 导航异常

    非常感谢Jimmy Zhang

    我已经提供了使用示例程序。

    import com.ximpleware.*;
    import java.io.*;
    public class testExpandSpace {
        public static void main(String[] args) throws VTDException,IOException{
            // TODO Auto-generated method stub
                VTDGen vg = new VTDGen();
                AutoPilot ap = new AutoPilot();
                XMLModifier xm = new XMLModifier();
                if (!vg.parseFile("d://xml//testSuresh.xml",false))
                    return;
                VTDNav vn=vg.getNav();
                ap.bind(vn);
                xm.bind(vn);
                ap.selectXPath("//name");
                int index=-1;
                while((index=ap.evalXPath())!=-1)
                {
                    System.out.println(" ===> "+vn.toString(index) +"===>");
                    long elementFragment=vn.getElementFragment();
                    xm.remove(vn.expandWhiteSpaces(elementFragment));
                }
                xm.output("d://xml//test1111.xml");
        }
    }
    

    【讨论】:

    • 我很快就会有一个新博客来解决您使用 2.13 的最新新方法提出的空白处理问题...