gpt4 book ai didi

java - 如何从 Java 中的 XML 中删除子元素?

转载 作者:行者123 更新时间:2023-11-29 03:26:44 24 4
gpt4 key购买 nike

这是我的 XML 文件

<?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>

我只想从我的 xml 中删除第二个选项。
我的 java 代码从我的选项元素中删除了所有选项。通过使用 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();
}

我的输出是:

<?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>

但我想要这样。

<?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将仅删除具有给定名称的第一个 child 。您可以使用 Element.removeContent(int index)按索引删除子元素

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

Element.removeContent(Content content)删除特定元素。

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

您说过要删除第二个选项,但在您的示例中删除了第三个选项。我有点困惑,所以必要时更改索引。

关于java - 如何从 Java 中的 XML 中删除子元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20675639/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com