新的XML Document与已解析的类不同?

我正在尝试创建一个简单的测试,以编程方式创建一个示例XML文档,将其写入文件,然后将其作为新实例读回以与原始实例进行比较。

但是,我遇到了一个问题,即新文档作为读回时的不同类的实例生成。

新文档= com.sun.org.apache.xerces.internal.dom.DocumentImpl
解析的文档= com.sun.org.apache.xerces.internal.dom.DeferredDocumentImpl

这意味着任何equals()调用来比较两者都将始终失败。我在这里想念东西吗?

下面的SSCCE:

import java.io.FileWriter;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Objects;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;

/**
 * Generate a sample XML Document,write it,read back in as a new instance,compare against original.
 */
public class SSCCE {

    // XML file location
    private static final Path LOCATION = Paths.get("C:\\Temp\\SAMPLE.XML");

    // Does the stuff
    public static void main(String[] args) {
        try {
            // New document
            DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
            docFactory.setNamespaceAware(true);

            DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
            Document documentOut = docBuilder.newDocument();
            documentOut.setXmlStandalone(true);

            // New root element
            Element root = documentOut.createElement("root");
            documentOut.appendChild(root);

            // Sample child nodes
            for (int i = 1; i <= 5; i++) {
                Node child = documentOut.createElement("child_" + Integer.toString(i));
                root.appendChild(child);
            }

            // Write to file
            writeXML(documentOut,LOCATION);

            // Read back in
            Document documentIn = readXML(LOCATION);

            // Compare
            boolean equals = Objects.equals(documentOut,documentIn);
            System.out.println("Documents equals = " + equals);
            System.out.println("OUT = " + documentOut.getclass().getcanonicalName());
            System.out.println("IN = " + documentIn.getclass().getcanonicalName());

        } catch (Exception exception) {
            exception.printStackTrace(System.err);
        }
    }

    // Write Document to file
    public static void writeXML(Document document,Path location) throws Exception {
        DOMSource source = new DOMSource(document);
        FileWriter writer = new FileWriter(location.toFile());
        StreamResult result = new StreamResult(writer);

        TransformerFactory transformerFactory = TransformerFactory.newInstance();
        Transformer transformer = transformerFactory.newTransformer();
        transformer.transform(source,result);
    }

    // Read document from file
    public static Document readXML(Path location) throws Exception {
        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
        Document doc = dBuilder.parse(location.toFile());
        return doc;
    }

}
jiayouboa 回答:新的XML Document与已解析的类不同?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3115591.html

大家都在问