Java - 从动态 XML 中删除子节点

标签 java xml dom removechild xmlnode

我想删除包含 Base64 格式的 PDF 的 XML 节点。这是一个例子:

<?xml version="1.0" encoding="UTF-8"?>
<getResult>
   <id>null</id>
   <pdf>ioje98fh23fjkiwf72322342</pdf>
</getResult>

首先,我将 String 中的 XML 转换为 Document,但结果为 null。这是我的代码:

DocumentBuilder dbf = null;
Document doc = null;

try {
    dbf = DocumentBuilderFactory.newInstance().newDocumentBuilder();

    InputSource is = new InputSource();
    is.setCharacterStream(new StringReader("<getResult><id>null</id><pdf>ioje98fh23fjkiwf72322342</pdf></getResult>"));

    doc = dbf.parse(is);

    NodeList children = doc. getChildNodes();

    for (int i = 0; i < children.getLength(); i++) {

        Node currentChild = children.item(i);

        System.out.println(currentChild);

    }

} catch (Exception e) {
    System.out.println(e.getMessage().toString());
}

结果始终是:[getResult: null]

考虑到主节点可以变化,但结构不变,如何获取PDF节点?

最佳答案

这是您可以用来检索数据的方法。

import java.io.StringReader;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.w3c.dom.CharacterData;

public class LabFour {
    public static void main(String[] args) {
        DocumentBuilder dbf = null;
        Document doc = null;

        try {
            dbf = DocumentBuilderFactory.newInstance().newDocumentBuilder();

            InputSource is = new InputSource();
            is.setCharacterStream(
                    new StringReader("<getResult><id>null</id><pdf>ioje98fh23fjkiwf72322342</pdf></getResult>"));
            doc = dbf.parse(is);

            NodeList nodes = doc.getElementsByTagName("getResult");

            for (int i = 0; i < nodes.getLength(); i++) {
                Element element = (Element) nodes.item(i);

                NodeList name = element.getElementsByTagName("id");
                Element line = (Element) name.item(0);
                System.out.println("id: " + getCharacterDataFromElement(line));

                NodeList pdf = element.getElementsByTagName("pdf");
                line = (Element) title.item(0);
                System.out.println("pdf: " + getCharacterDataFromElement(pdf));
            }

        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    public static String getCharacterDataFromElement(Element e) {
        Node child = e.getFirstChild();
        if (child instanceof CharacterData) {
            CharacterData cd = (CharacterData) child;
            return cd.getData();
        }
        return "?";
    }

}

关于Java - 从动态 XML 中删除子节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50852200/

相关文章:

java - 丢失 debug.keystore,我可以更新 Android 应用程序或检索应用程序数据吗?

sql - 选择 XML 节点作为行

javascript - addEventListener 内存泄漏

java - 如何格式化从数据库检索的数据

java - Netty:空闲状态处理程序不显示 channel 是否空闲

java - 如何告诉 proguard 保持枚举常量和字段

Android Button背景颜色在xml上没有改变

xml - Sql Server 中的东西和 'For Xml Path'

javascript - Firefox OS 应用程序中的动态内容

javascript - 为什么注入(inject) iframe 中的 JavaScript 使用父窗口作为其全局范围?