Java – NodeList не может получить дочерний узел

Я не понимаю, как получить дочерний узел, анализирующий XML-файл с помощью java. Например, у меня есть этот код:

import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class Parser {

    public static void main(String args[]) {

        try{
            File stocks = new File("Stocks.xml");
            DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
            Document doc = dBuilder.parse(stocks);
            doc.getDocumentElement().normalize();



            NodeList nodes = doc.getElementsByTagName("stock");
            Node nodez = nodes.item(1);
            String s = nodez.getFirstChild().getNodeName(); //outputs #text?
                        System.out.println(s);
                        //If I try this
                        String s = nodez.getNodeName(); //outputs 'stock'


        } catch (Exception e) {
            e.printStackTrace();
        }
    }



}

Поэтому, если я попытаюсь вывести имя текущего узла, он выведется правильно, но если я попытаюсь вывести имя следующего дочернего узла, он просто выведет #text. Как я могу правильно вывести любой узел, который захочу? Я думал, что могу просто использовать метод как getFirstChild или getNextSibling, но, похоже, я делаю что-то не так?

Вы можете найти файл xml, используя эту ссылку:

http://javarevisited.blogspot.com/2011/12/parse-xml-file-in-java-example-tutorial.html


person Andrius    schedule 08.11.2013    source источник


Ответы (2)


Элемент "stock" содержит текст, который возвращается как первый дочерний элемент. Вы можете использовать следующее:

        System.out.println(((Element) nodez).getElementsByTagName("symbol").item(0).getNodeName());
        // get all nodes
        NodeList nl=((Element) nodez).getElementsByTagName("*");
        for (int i = 0; i < nl.getLength(); i++) {
            System.out.println(nl.item(i).getNodeName());
        }
person pasha701    schedule 08.11.2013
comment
Спасибо за объяснение - person Andrius; 08.11.2013

Вам необходимо проверить тип узла. фактического узла.

#text тоже узел! но вы, вероятно, ищете тип Element

Получите список узлов из документа, используя Document#getElementsByTagName и повторите его. Проверьте тип каждого узла, чтобы определить, какие из них вас интересуют.

person A4L    schedule 08.11.2013