0

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>

質問1を削除する私の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);
4

3 に答える 3

0

questionノードを調べて、削除する希望の質問に一致させることができます。一致する場合は、その親ノードを削除できます。

于 2013-12-26T09:43:04.343 に答える
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);
于 2013-12-26T13:36:06.587 に答える
0

問題の簡単な解決策を見逃したと思います。JDOM コンテンツ (要素、属性、テキストなど) がある場合は、detach()メソッドを使用して親から削除できます。ただし、あなたの場合、イテレータを使用してルートノードの子要素を通過し、一致するコンテンツをイテレータから削除することができます....:

for (Iterator<Element> questit = rootElement.getChildren("quest").iterator();
         questit.hasNext();) {
    if (" This is question one".equals(questit.next().getChildText("question")) {
         questit.remove();
    }
}

ConcurrentModificationException が発生するため、反復子内で detach() を使用できないことに注意してください。

于 2013-12-26T13:32:04.963 に答える