gpt4 book ai didi

java - XML解析后Element Node对象转换为Text Node

转载 作者:行者123 更新时间:2023-12-01 08:59:06 25 4
gpt4 key购买 nike

第一次运行这个程序时,我需要创建 xml,我首先创建文件并创建一个 Document 对象,然后将其转换为 Element 对象。

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

Document xmlFile = XmlParser.parseXmlString(xmlDoc);
Element element = xmlFile.getDocumentElement();

我已经用它的 NodeType 代码验证了这一点,但是当我创建父节点时,它给了我 Element_Node == 1。我将此节点附加到元素对象。

        Element newElement = xmlFile.createElement("parent");
newElement.setAttribute("id", i);
element.appendChild(newElement);

如果子元素还不是父元素的子元素,我会将其放入父元素中,我会检查这一点,如果它还不是子元素,我将创建一个新的 Node 类并为其提供文本内容。

            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>

现在文件已创建,将读取该文件,然后解析该文件以创建元素而不是硬编码字符串。

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 并且 Text_Node 类型值 == 3。无法转换以下对象。

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

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

最佳答案

当您在编写树时使用缩进时,元素节点之间会有空格,因此子节点可以是带有空格的文本节点。如果您正在查找第一个元素子节点,请使用 XPath *[1] 或简单地使用元素的名称 foo[1] 或者如果您想使用childNodes 确保检查节点类型,直到获得元素节点。

关于java - XML解析后Element Node对象转换为Text Node,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41825323/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com