当前位置: 动力学知识库 > 问答 > 编程问答 >

How to remove child element from XML in java?

问题描述:

This is my XML file

<?xml version="1.0" encoding ="utf-8" ?>

<mcss>

<quest ans="1">

<question><![CDATA[Write 5x= 3y-1 as linear equation form.]]></question>

<options>

<option><![CDATA[5x-3y+1=0]]></option>

<option><![CDATA[-5x-3y-1=0]]></option>

<option><![CDATA[5x+3y+1=0]]></option>

</options>

<explaination><![CDATA[Recall the linear equation in two variables form.]]></explaination>

</quest>

</mcss>

I just want to remove 2nd one option from my xml.

My java code remove all option from my options element. by using option.getParentElement().removeChild("option");

try {

String path="D://test//n2027_set1.xml";

File structureXml = new File(path);

SAXBuilder saxb = new SAXBuilder();

Document document = saxb.build(structureXml);

Element rootElement = document.getRootElement();

XMLOutputter xmlOutput = new XMLOutputter();

List qestList = rootElement.getChildren();

for (int i = 0; i < qestList.size(); i++) {

Element quesList = (Element) qestList.get(i);

System.out.println(quesList.getAttributeValue("ans"));

//change ans field

quesList.setAttribute("ans", ""+i);

List qList = quesList.getChildren();

for(int a=0;a< qList.size();a++) {

Element ques =(Element) qList.get(a);

if(ques.getAttributeValue("file")!=null){

//read xml

System.out.println(ques.getAttributeValue("file"));

//write xml attribute

//System.out.println(ques.setAttribute("file","dasd"+a));

}

if(ques.getName().equalsIgnoreCase("question")){

//read

System.out.println(ques.getTextTrim());

ques.addContent(new CDATA(ques.getTextTrim()));

}

if (ques.getName().equalsIgnoreCase("options")) {

List optList = ques.getChildren();

for (int k = 0; k < optList.size(); k++) {

Element option = (Element) optList.get(k);

if(option.getName().equalsIgnoreCase("option")){

//read

option.getParentElement().removeChild("option");

}

}

}

if(ques.getName().equalsIgnoreCase("explaination")){

ques.removeContent();

ques.addContent(new CDATA("explaination"+a));

}

}

}

FileOutputStream file=new FileOutputStream(path);

xmlOutput.output(document, file);

}catch (JDOMException ex) {

ex.printStackTrace();

} catch (IOException ex) {

ex.printStackTrace();

}

my output is:

<?xml version="1.0" encoding ="utf-8" ?>

<mcss>

<quest ans="1">

<question><![CDATA[Write 5x= 3y-1 as linear equation form.]]></question>

<options>

</options>

<explaination><![CDATA[Recall the linear equation in two variables form.]]></explaination>

</quest>

</mcss>

but I want like this.

<?xml version="1.0" encoding ="utf-8" ?>

<mcss>

<quest ans="1">

<question><![CDATA[Write 5x= 3y-1 as linear equation form.]]></question>

<options>

<option><![CDATA[5x-3y+1=0]]></option>

<option><![CDATA[-5x-3y-1=0]]></option>

</options>

<explaination><![CDATA[Recall the linear equation in two variables form.]]></explaination>

</quest>

</mcss>

网友答案:

Element.removeChild will remove only the first child with the given name. You can use Element.removeContent(int index) to remove child element by index

if (ques.getName().equalsIgnoreCase("options")) {
    ques.removeContent(2);
}

or Element.removeContent(Content content) to remove specific element.

if (ques.getName().equalsIgnoreCase("options")) {
    List<Element> options = ques.getChildren("option");
    if(options.size()>2) {
        Element optionToRemove = options.get(2);
        ques.removeContent(optionToRemove);
    }
}    

You said you want to remove the second option, but in your example third one is removed. I'm slightly confused, so change index if necessary.

网友答案:
if (ques.getName().equalsIgnoreCase("options")) {
                         List optList = ques.getChildren();
                         for (int k = optList.size()-1; k < optList.size(); k++) {
                             Element option = (Element) optList.get(k);
                             if(option.getName().equalsIgnoreCase("option")){
                                //read 
                                option.getParentElement().removeChild("option");
                            }
                         }
                    }

just focus on the loop and iterate from last index -1 that i have done in code.

分享给朋友:
您可能感兴趣的文章:
随机阅读: