Java XML解析后,元素节点对象转换为文本节点

Java XML解析后,元素节点对象转换为文本节点,java,xml,dom,xml-parsing,w3c,Java,Xml,Dom,Xml Parsing,W3c,第一次运行此程序时,我需要创建xml,首先创建文件并创建文档对象,然后将其转换为元素对象 xmlDoc = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"; xmlDoc +="<head>"; xmlDoc += "</head>"; Document xmlFile = XmlParser.parseXmlString(xmlDoc);

第一次运行此程序时,我需要创建xml,首先创建文件并创建文档对象,然后将其转换为元素对象

        xmlDoc = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
        xmlDoc +="<head>";
        xmlDoc +=  "</head>";

        Document xmlFile =  XmlParser.parseXmlString(xmlDoc);
        Element element = xmlFile.getDocumentElement();
如果子元素还不是父元素的子元素,我会将它放在父元素中,我会对此进行检查,如果它还不是子元素,我会创建一个新的节点类并为它提供文本内容

            Node newChild = xmlFile.createElement("child");
            newChild.setTextContent(text);
            newElement.appendChild(newChild);
然后我将用转换器保存此文件

 Transformer transformer = null;
        try {
            transformer = TransformerFactory.newInstance().newTransformer();
        } catch (TransformerConfigurationException | TransformerFactoryConfigurationError e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        transformer.setOutputProperty(OutputKeys.INDENT, "yes"); 
        DOMSource source = new DOMSource(xmlFile);
        StreamResult console = new StreamResult(System.out);
        try {
            transformer.transform(source, new StreamResult(new FileOutputStream(file.getPath())));
        } catch (TransformerException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
现在,第二次运行程序时,我将直接从这个文件解析。创建的XML文件具有以下结构

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<head>
<parent id="1">
<child>text1</child>
<child>text2</child>
<child>text3</child>
</parent>
<parent id="2">
<child>text1</child>
<child>text2</child>
</parent>
</head>
现在的问题是父元素不能强制转换为元素,并且具有Text_Node type值==3。无法强制转换以下对象

Element nextSib = (Element) element.getFirstChild();

其思想是,现在我可以通过遍历每个父节点将相关的子节点附加到父节点,这就是为什么我需要以元素形式获取它,以便使用id属性。但是我不能这样做,因为父节点由于某种原因被转换为文本节点

当您在写入树时使用缩进时,元素节点之间会有空白,因此子节点可以是带有空白的文本节点。如果要查找第一个元素子节点,请使用XPath
*[1]
或仅使用元素的名称
foo[1]
,或者如果要使用
childNodes
执行此操作,请确保检查节点类型,直到找到元素节点为止。

或者,在不缩进的情况下序列化文件。
xmlDoc = this.readFile(file, Charset.forName("UTF-8"));
Document xmlFile =  XmlParser.parseXmlString(xmlDoc);
Element element = xmlFile.getDocumentElement();
...
 String readFile(File file, Charset charset) throws IOException {
        return new String(Files.readAllBytes(file.toPath()), charset);
Element nextSib = (Element) element.getFirstChild();