【问题标题】:How to remove children element from XML in java?java - 如何从Java中的XML中删除子元素?
【发布时间】:2013-12-26 09:34:10
【问题描述】:

我想从 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);

【问题讨论】:

  • 你的问题是什么?
  • 如何从 xml 中删除子元素?

标签: java dom jdom jdom-2


【解决方案1】:

您可以遍历每个question 节点并匹配您想要删除的问题,如果匹配则您可以删除它的父节点。

【讨论】:

  • 我有问题编号,所以不想匹配 qhole 问题。
  • 我没有保存在 xml bt 我有这个问题没有,我想删除这个问题。我已经删除了这个问题 bt 我的代码只删除了第一个问题而不是随机的。
【解决方案2】:

我认为您错过了解决问题的简单方法。如果您有任何 JDOM 内容(元素、属性、文本等),您可以使用 detach() 方法将其从其父级中删除。但是,在您的情况下,您可能希望使用 Iterator 来遍历根节点的子元素,然后从 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。

【讨论】:

    【解决方案3】:

    此代码首先删除问题。它有效。

     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);
    

    【讨论】:

      猜你喜欢
      • 2014-01-07
      • 2021-04-25
      • 1970-01-01
      • 2018-07-01
      • 1970-01-01
      • 2013-05-21
      • 1970-01-01
      • 2012-02-24
      • 2015-08-18
      相关资源
      最近更新 更多