从java中的XML文件中删除元素

时间:2014-03-17 10:45:16

标签: java xml

我已经从Excel数据库生成了一个xml文件,它自动包含一个名为" offset"的元素。为了使我的新文件符合我的需要,我想使用java删除这个元素。 这是xml内容:

<Root><models><id>2</id><modelName>Baseline</modelName><domain_id>2</domain_id><description> desctiption </description><years><Y2013>value1</Y2013><Y2014>value2</Y2014><Y2015>value3</Y2015><Y2016>value4</Y2016><Y2017>value5</Y2017></years><offset/></models></Root>

我创建了一个代码(使用缓冲的阅读器)并将内容写入新文件并使用以下条件:

        while (fileContent !=null){
        fileContent=xmlReader.readLine();
        if (!(fileContent.equals("<offset/>"))){
            System.out.println("here is the line:"+ fileContent);
            XMLFile+=fileContent;
            }


    }

但它不起作用

5 个答案:

答案 0 :(得分:0)

我个人建议使用适当的XML解析器(如Java DOM)来检查和删除节点,而不是将XML作为原始String处理(yuck)。尝试这样的方法来删除你的'偏移'节点。

File xmlFile = new File("your_xml.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(xmlFile);

NodeList nList = doc.getElementsByTagName("offset");
for (int i = 0; i < nList.getLength(); i++) {
    Node node = nList.item(i);
    node.getParentNode().removeChild(node); 
}

上面的代码删除了xml文件中的所有“偏移”节点。

如果资源/速度考虑因素是一个问题(例如,当your_xml.xml很大时),最好使用SAX,这样会更快(代码密集程度更高)并且不存储XML在记忆中。

编辑完Document后,您可能希望convert it to a String解析为您选择的OutputStream

希望这有帮助。

答案 1 :(得分:0)

尝试用空字符串替换不需要的字符串。这很快......而且很脏。但是可以快速解决你的问题......以后再重新出现; - )

fileContent.replace(“<offset/>,”“);

答案 2 :(得分:0)

   String sXML= "<Root><models><id>2</id><modelName>Baseline</modelName><domain_id>2</domain_id><description> desctiption </description><years><Y2013>value1</Y2013><Y2014>value2</Y2014><Y2015>value3</Y2015><Y2016>value4</Y2016><Y2017>value5</Y2017></years><offset/></models></Root>";
   System.out.println(sXML);
   String sNewXML = sXML.replace("<offset/>", "");
   System.out.println(sNewXML);

答案 3 :(得分:0)

String xml = "<Root><models><id>2</id><modelName>Baseline</modelName><domain_id>2</domain_id><description> desctiption </description><years><Y2013>value1</Y2013><Y2014>value2</Y2014><Y2015>value3</Y2015><Y2016>value4</Y2016><Y2017>value5</Y2017></years><offset/></models></Root>";
            xml = xml.replaceAll("<offset/>", "");
            System.out.println(xml);

答案 4 :(得分:0)

在您包含的原始代码中,您有:

while (fileContent !=null)

您是否在该行之前将fileContent初始化为某个非空值?如果没有,则while块中的代码将不会运行。

但我同意其他海报的看法,简单的replaceAll()会更简洁,如果你想做更复杂的事情,真正的XML API会更好。