使用removeContent()从JDOM文档中删除Element

| 给定以下情形,其中xml,Geography.xml看起来像-
<Geography xmlns:ns=\"some valid namespace\">
    <Country>
        <Region>
            <State>
                <City>
                    <Name></Name>
                    <Population></Population>
                </City>
            </State>
            </Region>
        </Country>
    </Geography>
和以下示例Java代码-
InputStream is = new FileInputStream(\"C:\\\\Geography.xml\");
SAXBuilder saxBuilder = new SAXBuilder();
Document doc = saxBuilder.build(is);

XPath xpath = XPath.newInstance(\"/*/Country/Region/State/City\");
Element el = (Element) xpath.selectSingleNode(doc);
boolean b = doc.removeContent(el);
removeContent()
方法不会将元素
City
doc
的内容列表中删除。 b的值为
false
我不明白为什么它不删除Element,我什至试图从xml中删除
Name
Population
元素,只是看这是否是问题,但显然不是。 我尝试过的另一种方法是,我不知道为什么我仍然知道它并没有本质上的不同,只是为了方便起见,使用
Parent
-
Parent p = el.getParent();
boolean s = p.removeContent(new Element(\"City\"));
可能是什么问题?还有可能的解决方案?如果有人可以分享方法“ 2”的真实行为,我怀疑它与父子关系有关。     
已邀请:
当然,如果孩子属于父母的直系子女,ѭ11s会将其删除,但您的情况并非如此。改用ѭ12。     
如果要删除
City
元素,请获取其父元素并调用
removeContent
    XPath xpath = XPath.newInstance(\"/*/Country/Region/State/City\");
    Element el = (Element) xpath.selectSingleNode(doc);
    el.getParent().removeContent(el);
doc.removeContent(el)
不起作用的原因是因为
el
不是
doc
的孩子。 检查javadocs以获取详细信息。那里有许多重载的“ 14”方法。     
记住这种方法的目的是,.getParent()返回一个Parent对象而不是Element对象,并且必须从Element中调用消除实际节点的detach()方法。 而是:
el.getParentElement().detach();
这将删除所有父元素及其所有子元素!     

要回复问题请先登录注册