Примечание: XML в вопросе было изменено. Следующее основано на оригинальном XML с добавленным тегом root, как показано в конце ответа.
Вам необходимо использовать структуру XML, когда извлечение информации из дерева DOM.
По сути, не повторяйте элементы <Accountnumber>
, повторяйте элементы <AccountDetails>
документа, а затем используйте метод getElementsByTagName(...)
для этих объектов Element
, не метод для объекта Document
, для поиска вложенных элементов.
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
Document document = documentBuilder.parse(file);
NodeList accountDetailsNodes = document.getElementsByTagName("AccountDetails");
for (int i = 0; i < accountDetailsNodes.getLength(); i++) {
Element accountDetailsElem = (Element) accountDetailsNodes.item(i);
String accountnumber = accountDetailsElem.getElementsByTagName("Accountnumber").item(0).getTextContent();
System.out.println("Account #" + (i + 1) + ":");
System.out.println(" Account number: " + accountnumber);
NodeList personalDetailsNodes = accountDetailsElem.getElementsByTagName("PersonalDetails");
for (int j = 0; j < personalDetailsNodes.getLength(); j++) {
Element personalDetailsElem = (Element) personalDetailsNodes.item(j);
String age = personalDetailsElem.getElementsByTagName("age").item(0).getTextContent();
String name = personalDetailsElem.getElementsByTagName("name").item(0).getTextContent();
String gender = personalDetailsElem.getElementsByTagName("gender").item(0).getTextContent();
String role = personalDetailsElem.getElementsByTagName("role").item(0).getTextContent();
System.out.println(" Person #" + (j + 1) + ":");
System.out.println(" Age: " + age);
System.out.println(" Name: " + name);
System.out.println(" Gender: " + gender);
System.out.println(" Role: " + role);
}
}
Выход
Account #1:
Account number: 123
Person #1:
Age: 29
Name: Pankaj
Gender: Male
Role: Java Developer
Account #2:
Account number: 456
Person #1:
Age: 35
Name: Julie
Gender: Female
Role: Dotnet Developer
Выше было проверено со следующим XML:
<Root>
<AccountDetailsList>
<AccountDetails>
<Accountnumber>123</Accountnumber>
<PersonalDetailsList>
<PersonalDetails>
<age>29</age>
<name>Pankaj</name>
<gender>Male</gender>
<role>Java Developer</role>
</PersonalDetails>
</PersonalDetailsList>
</AccountDetails>
</AccountDetailsList>
<AccountDetailsList>
<AccountDetails>
<Accountnumber>456</Accountnumber>
<PersonalDetailsList>
<PersonalDetails>
<age>35</age>
<name>Julie</name>
<gender>Female</gender>
<role>Dotnet Developer</role>
</PersonalDetails>
</PersonalDetailsList>
</AccountDetails>
</AccountDetailsList>
</Root>