我想从xml中删除子元素。
我的XML文件是
<mcss>
<quest ans="0">
<question><![CDATA[ This is question one]]></question>
<options>
<option><![CDATA[B<Option one]]></option>
<option><![CDATA[B<Option second]]></option>
<option><![CDATA[B<Option three]]></option>
</options>
<explaination><![CDATA[explaination one]]></explaination>
</quest>
<quest ans="0">
<question><![CDATA[ This is question two]]></question>
<options>
<option><![CDATA[B<Option one]]></option>
<option><![CDATA[B<Option second]]></option>
<option><![CDATA[B<Option three]]></option>
</options>
<explaination><![CDATA[explaination two]]></explaination>
</quest>
</mcss>
如果我想首先删除问题该怎么办? 输出XML ..
<?xml version="1.0" encoding="UTF-8"?>
<mcss>
<quest ans="0">
<question><![CDATA[ This is question two]]></question>
<options>
<option><![CDATA[B<Option one]]></option>
<option><![CDATA[B<Option second]]></option>
<option><![CDATA[B<Option three]]></option>
</options>
<explaination><![CDATA[explaination two]]></explaination>
</quest>
</mcss>
我的java代码删除问题一。
String path="D://test//N2074_set2.xml";
File structureXml = new File(path);
SAXBuilder saxb = new SAXBuilder();
Document document = saxb.build(structureXml);
Element rootElement = document.getRootElement();
XMLOutputter xmlOutput = new XMLOutputter();
for (int i = 0; i < qestList.size(); i++) {
Element quesList = (Element) qestList.get(2);
if(quesList.getName().equalsIgnoreCase("quest"))
rootElement.removeContent(2);
}
FileOutputStream file=new FileOutputStream(path);
xmlOutput.output(document, file);
答案 0 :(得分:0)
您可以浏览每个question
节点并匹配您要移除的愿望问题,如果匹配则可以删除它的父节点。
答案 1 :(得分:0)
我认为你错过了解决问题的简单方法。如果您有任何JDOM内容(元素,属性,文本等),则可以使用detach()
方法将其从父项中删除。但是,在您的情况下,您可能希望使用Iterator遍历根节点的子元素,然后从迭代器中删除匹配的内容....:
for (Iterator<Element> questit = rootElement.getChildren("quest").iterator();
questit.hasNext();) {
if (" This is question one".equals(questit.next().getChildText("question")) {
questit.remove();
}
}
请注意,您不能在迭代器中使用detach(),因为这会导致ConcurrentModificationException。
答案 2 :(得分:0)
此代码首先删除问题。它的工作原理。
Document document = saxb.build(structureXml);
Element rootElement = document.getRootElement();
XMLOutputter xmlOutput = new XMLOutputter();
List qestList = rootElement.getChildren();
Element quesList = (Element) qestList.get(0);
if(quesList.getName().equalsIgnoreCase("quest")){
rootElement.removeContent(quesList);
}
FileOutputStream outputStream=new FileOutputStream(path);
xmlOutput.output(document, outputStream);