Я использую java для чтения шаблона xml. Этот шаблон исходит из текстового файла, поэтому важно сохранить этот шаблон, чтобы сохранить структуру элементов внутри и организации данных (я не нашел другого способа сохранить структуру и данные каким-либо другим способом без использования XML файла),
Чтобы сделать код проще, я просто поставлю упрощенный код, исключая всю информацию без переопределения, и покажу только теги, пока уровень проблемы не будет найден.
<a>
<b>More Tags </b>
</a>
<a>
<b>More Tags </b>
</a>
<a>
<b>
<c>
<d>More Tags </d>
</c>
</b>
</a>
<a>
<b>
<c>
<d>More Tags </d>
</c>
</b>
</a>
<a>
<b>More Tags </b>
</a>
<a>
<b>More Tags </b>
</a>
<a>
<b>More Tags </b>
</a>
<a>
<b>More Tags </b>
</a>
<a>
<b>More Tags </b>
</a>
<a>
<b>More Tags </b>
</a>
<a>
<b>More Tags </b>
</a>
<a>
<b>More Tags </b>
</a>
Чтобы прочитать это, используя следующий код Java:
public static int listFile() throws ParserConfigurationException,
SAXException, IOException {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
folder = getPath();
File dir = new File(folder);
String[] list = dir.list(filter);
for (String file : list) {
Document doc = (Document) db.parse(file);
doc.getDocumentElement().normalize();
NodeList nodes = doc.getElementsByTagName("a");
for(int var1=0;var1<nodes.getLength();var1++){
Element element1 = (Element) nodes.item(var1);
NodeList nodes1 = element1.getElementsByTagName("b");
for(int var2=0; var2<nodes1.getLength();var2++){
Element element2 = (Element) nodes.item(var2);
NodeList nodes2 = element2.getElementsByTagName("c");
System.out.print(var1+":"+nodes1.getLength()+":"+nodes2.getLength()+", ");
}
}
}
}
Результатом использования этого кода является следующее:
0:1:0, 1:1:0, 2:1:0, 3:1:0, 4:1:0, 5:1:0, 6:1:0, 7:1:0, 8:1:0, 9:1:0, 10:1:0,
Это означает, что найдены все 11 (от 0 до 10) тегов "a". Также были найдены теги "b", соответствующие каждому тегу "a" (1 "b" в каждом теге "a"), но когда я пытаюсь получить доступ к тегу "c", эти теги не найдены. Это заставляет меня подозревать, что код
Элемент element2 = (Элемент) node.item(var2);
Узлы NodeList2 = element2.getElementsByTagName("c");
неправильно, даже если на предыдущем этапе работает нормально. Вы видите какое-либо решение для этого?
Вероятно, это связано с опечаткой вашего кода:
Element element2 = (Element) nodes1.item(var2); // instead of nodes
nodes
относятся к элементам a
.
ваш element2 генерируется из узлов вместо узлов1. измените на это:
Element element2 = (Element) nodes1.item(var2);