我对使用Java生成XML相当陌生,并且在尝试使用DOMParser将节点追加到特定标签时遇到问题。最终,我的目标是使用第一行创建标签来动态解析XLS文件,并使用其他行中的数据相应地填充XML。但是现在,我只想知道如何添加XML中已经存在的特定节点。
XML文档
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<header>
+<TAG1>*
$<TAG2>**
</TAG2>**
+<TAG3>**
$<TAG4>***
</TAG4>***
+<TAG5>***
$<TAG6>****
</TAG6>****
$<TAG7>****
</TAG7>****
</TAG5>
$<TAG8>
</TAG8>
</TAG3>**
</TAG1>
</header>
我使用PrintWriter构建了XML文件以写出选项卡,然后在写完标签后关闭了文档。现在,我尝试使用DOMParser重新打开它们,并将数据添加到适当的标记中。
我一直在尝试通过将节点转换为元素来选择标签(例如TAG6)getElementsByTagName
。但是,我一直收到ClassCastException。现在,我试图在文档中的任意位置添加一个节点。
File outputFile = new File("C:\\Users\\User\\Documents\\test.xml");
DocumentBuilderFacotry dBFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dB = dBFactory.newDocumentBuilder();
org.w3c.dom.Document doc = dB.parse(outputFile);
org.w3c.dom.Element tagTest = doc.createEleement("tagTest");
org.w3c.dom.Element node = doc.createElement("newNode");
org.w3c.dom.Text text = doc.createTestNode("data");
node.appendChild(text);
tagTest.appendChild(node);
TransformerFactory tFactory = TransformerFactory.newInstance();
Transformer transformer = tFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
transformer/setOutputProperty(OutputKeys.INDENT, "yes");
Writer out = new StringWriter();
transformer.transform(new DOMSource(doc), new StreamResult(outputFile));
System.out.println(out.toString());
我的代码编译没有错误或异常,但是即使代码的最后一行,也没有任何内容打印到控制台。同样,在XML文档的任何地方都没有新节点出现。