DR_Demons
@DR_Demons

Как получить все дочерние элементы XML файле с помощью DOM в Java?

Всем Доброго времени суток! Столкнулся с проблемой, есть xml документ
документ
<?xml version="1.0" encoding="utf-8"?> 
<schools> 
    <school id = "1"> 
        <class>
		<element_1>pupil_1</element_1>
		<element_2>pupil_2</element_2>
		<element_3>pupil_3</element_3>
        </class>
        <super_class>
		<element_1>super_pupil_1</element_1>
		<element_2>super_pupil_2</element_2>
		<element_3>super_pupil_3</element_3>
        </super_class>
    </school>
    <school id = "2"> 
        <class>
		<element_1>pupil_1</element_1>
		<element_2>pupil_2</element_2>
		<element_3>pupil_3</element_3>
        </class>
        <super_class>
		<element_1>super_pupil_1</element_1>
		<element_2>super_pupil_2</element_2>
		<element_3>super_pupil_3</element_3>
        </super_class>
    </school>
    <school id = "3"> 
        <class>
		<element_1>pupil_1</element_1>
		<element_2>pupil_2</element_2>
		<element_3>pupil_3</element_3>
        </class>
        <super_class>
		<element_1>super_pupil_1</element_1>
		<element_2>super_pupil_2</element_2>
		<element_3>super_pupil_3</element_3>
        </super_class>
    </school>
</schools>


из него по id школы нужно получить все значения дочерних элементов одной школы(class и super_class), Я знаю как получить значения отдельного
элемента
File fXmlFile = new File("demo.xml");
			DocumentBuilderFactory dbFactory = DocumentBuilderFactory
					.newInstance();
			DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
			Document doc = dBuilder.parse(fXmlFile);

			doc.getDocumentElement().normalize();

			System.out.println("Root element :"
					+ doc.getDocumentElement().getNodeName());

			NodeList nList = doc.getElementsByTagName("school");

			for (int temp = 0; temp < nList.getLength(); temp++) {

				Node nNode = nList.item(temp);

				if (nNode.getNodeType() == Node.ELEMENT_NODE) {

					Element eElement = (Element) nNode;

					if (eElement.getAttribute("id").equals(findElement)) {
						System.out.println("\nCurrent Element :"
								+ nNode.getNodeName());

						System.out.println("Staff id : "
								+ eElement.getAttribute("id"));

						System.out.println("Class element : "
								+ eElement.getElementsByTagName("class").item(0).getTextContent().trim());
						System.out.println("Super Class element : "
								+ eElement.getElementsByTagName("super_class").item(0).getTextContent().trim());

				}
			}
Как получить значение обоих элементов?

Заранее Спасибо!
  • Вопрос задан
  • 3403 просмотра
Решения вопроса 1
DR_Demons
@DR_Demons Автор вопроса
Нашел решение сам, то что нужно можно добиться с помощью следующего
кода
Node el = eElement.getFirstChild();
						do {
							System.out.println(el.getTextContent());
							el = el.getNextSibling();
						} while (el != null);
насчет его эстетичности не могу ничего сказать, но это работает.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@gurinderu
java developer
Как вариант xpath.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы