java - 如何使用 JDOM 删除 XML 节点?

标签 java xml jdom

这是我的代码:

try
{
    Document fichero = (Document) builder.build( xmlFile );
    Element rootNode = fichero.getRootElement();
    List list = rootNode.getChildren( "fichada" );
    for ( int i = 0; i < list.size(); i++ )
    {
        Element tabla = (Element) list.get(i);
        String term = tabla.getChildTextTrim("N_Terminal");
        String tarj = tabla.getChildTextTrim("Tarjeta");
        String fech = tabla.getChildTextTrim("Fecha");
        String horaEnXML = tabla.getChildTextTrim("Hora");
        String caus = tabla.getChildTextTrim("Causa");    
        //HERE I WANT TO DELETE THE NODE 
    }
} catch ( IOException io ) {
    System.out.println( io.getMessage() );
} catch ( JDOMException jdomex ) {
    System.out.println( jdomex.getMessage() ); 
}

我需要在变量中保存值后立即删除节点,我该怎么做?

最佳答案

“删除”节点有几个不同的含义。您可以从内存中的 JDOM 模型中删除该节点,此外,您还可以覆盖磁盘上没有该节点的文件,以保存修改后的文档。

要从 XML 文档中删除节点,请“分离”它:

.....
String caus = tabla.getChildTextTrim("Causa");
tabla.detach();

分离 tabla 元素后,它将不再是内存中文档的一部分,但您仍然可以将 tabla 作为 XML 的“片段”引用。

如果要将修改后的文档保存回文件,则需要将 XML 写回文件:

try (FileOutputStream fos = new FileOutputStream(xmlfile)) {
    XMLOutputter xmlout = new XMLOutputter();
    xmlout.output(fichero, fos);
}

此外,您确实应该使用 JDOM 2.x,其中泛型将有助于使您的代码更加整洁:

try
{
    Document fichero = (Document) builder.build( xmlFile );
    Element rootNode = fichero.getRootElement();
    for (Element tabla : rootNode.getChildren( "fichada" )) {
        String term = tabla.getChildTextTrim("N_Terminal");
        String tarj = tabla.getChildTextTrim("Tarjeta");
        String fech = tabla.getChildTextTrim("Fecha");
        String horaEnXML = tabla.getChildTextTrim("Hora");
        String caus = tabla.getChildTextTrim("Causa");    

        //HERE I WANT TO DELETE THE NODE 
        tabla.detach();
    }
} catch ( IOException io ) {
    System.out.println( io.getMessage() );
} catch ( JDOMException jdomex ) {
    System.out.println( jdomex.getMessage() ); 
}

关于java - 如何使用 JDOM 删除 XML 节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30073309/

相关文章:

java - JDOM 解析速度比 DOM 慢得多

java - "Find Tag from Selection"在标记的 pdf 中不起作用?

xml - 如何使用 xpath 查找根元素名称

java - 如何在JDOM中写入xml属性值?

java - 生成漂亮的 JAXB 类

c# - 解析几乎格式正确的 XML 片段 : how to skip over multiple XML headers

java - 当 XML 是行集时 Jdom 无结果

java - 如何将我的应用程序添加到 "Open With"对话框?

java - 使用 jxls 写入大量行以在 java 中表现出色

java - 如何在编译时确保枚举开关的完整性?