Использование Java для доступа к глубокой структуре XML

1

Я использую 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");

неправильно, даже если на предыдущем этапе работает нормально. Вы видите какое-либо решение для этого?

Теги:

2 ответа

1
Лучший ответ

Вероятно, это связано с опечаткой вашего кода:

Element element2 = (Element) nodes1.item(var2);  // instead of nodes

nodes относятся к элементам a.

1

ваш element2 генерируется из узлов вместо узлов1. измените на это:

Element element2 = (Element) nodes1.item(var2);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню