При первом запуске этой программы мне нужно создать xml, я сначала создаю файл и создаю объект Document, а затем преобразую его в объект Element.Объект элемента элемента преобразуется в текстовый узел после разбора XML
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);
Проблема теперь родительский элемент не может быть отлит как элемент и имеет значение == типа Text_Node 3. Следующий объект не может быть литыми.
Element nextSib = (Element) element.getFirstChild();
Идея заключается в том, что теперь я могу добавить соответствующий ребенка к родителю, проходя через каждый родительский узел, который является, почему я должен получить его в виде элемента, так что я могу использовать атрибут ID. Но я не могу этого сделать, поскольку родительский узел почему-то преобразован в текстовый узел.
В качестве альтернативы, сериализуйте файл без отступов. –