【问题标题】:Remove node from XML Document从 XML 文档中删除节点
【发布时间】:2016-11-05 08:59:05
【问题描述】:
<Address>
    <value xsi:type="..." xmlns:ns3="..." xmlns:xsi="....">
        <item>
            <Country>USA</Country>
            <City>New York</City>
            <Street>Sunrise Av.</Street>
            <Number>164</Number>
        </item>
    </value>
</Address>
<University>
    <value xsi:type="..." xmlns:ns3="..." xmlns:xsi="....">
        <item>
            <Name>Cambridge</Name>
            <Location>UK</Location>
            <Department>IT</Department>
        </item>
    </value>
</University>
<Work>
    <value xsi:type="..." xmlns:ns3="..." xmlns:xsi="....">
</Work>

我将上述 XML 存储在 Java 字符串中。我想从所有节点中删除 &lt;value&gt; 标记。您对我如何做到这一点有任何解决方案吗?

我想要的结果如下:

<Address>
    <item>
        <Country>USA</Country>
        <City>New York</City>
        <Street>Sunrise Av.</Street>
        <Number>164</Number>
    </item>
</Address>
<University>
    <item>
        <Name>Cambridge</Name>
        <Location>UK</Location>
        <Department>IT</Department>
    </item>
</University>
<Work>
</Work>

【问题讨论】:

  • 我可以想到两种方法:1)将其解析为 DOM,删除元素,然后将其写回。 2) 通过过滤掉元素的 XSLT 转换发送它。
  • 移除标签?还是删除该标签所包含的所有内容,包括该标签?
  • 我只想删除标签。标签所包含的所有内容都应该存在。例如,不应删除 标记。
  • 我已经使用 JAXBContext 和 Marshaller 生成了 XML。有没有办法可以使用它们来删除 标记,如上面的示例所示?

标签: java xml xml-parsing


【解决方案1】:

下面是一个基于 XPath 和 VTD-XML 的 sn-p

import com.ximpleware.*;
import java.io.*;
public class removeTag {
    public static void main(String[] args) throws VTDException,IOException {
        // TODO Auto-generated method stub
        VTDGen vg = new VTDGen();
        AutoPilot ap=new AutoPilot();
        ap.selectXPath("//value");
        XMLModifier xm = new XMLModifier();
        if (!vg.parseFile("d:\\xml\\tag.xml", false)){
            System.out.println("error in xml");
            return;
        }
        VTDNav vn = vg.getNav();
        xm.bind(vn);
        ap.bind(vn);
        int i=0;
        while((i=ap.evalXPath())!=-1){
            xm.remove();//remove value fragment     
            long l = vn.getContentFragment(); //replace value with everything it encloses
            xm.insertBeforeElement(vn.getXML().getBytes(), l);
        }
        xm.output("d:\\xml\\newTag.xml");
    }
}

【讨论】:

    猜你喜欢
    • 2020-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多