我已经从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;
}
}
但它不起作用
答案 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会更好。