Sample tag in XML file:
<AccountDetailsList>
<AccountDetails>
<Accountnumber>123/<Accountnumber>
</AccountDetails>
<PersonalDetailsList>
<age>29</age>
<name>Pankaj</name>
<gender>Male</gender>
<role>Java Developer</role>
</PersonalDetailsList>
<AccountDetails>
<Accountnumber>456/<Accountnumber>
</AccountDetails>
<PersonalDetailsList>
<age>35</age>
<name>Julie</name>
<gender>Female</gender>
<role>Dotnet Developer</role>
</PersonalDetailsList>
</AccountDetailsList>
Java Code:
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); Document document =documentBuilder.parse(file); NodeList nodeList1 = document.getElementsByTagName("Accountnumber"); for (int k = 0; k < nodeList1.getLength(); k++) { Node accountnode = nodeList1.item(k); //to read all the tags from account number if (accountnode != null) { String acc = document.getElementsByTagName("Accountnumber").item(k).getTextContent(); System.out.println("Account number:" + " " + acc); NodeList nodeList2 = document.getElementsByTagName("age"); for (int j = 1; j < nodeList2.getLength(); j++) { Node age_node = nodeList2.item(j); if (age_node != null) { String age = document.getElementsByTagName("age").item(j).getTextContent() String name = document.getElementsByTagName("name").item(j).getTextContent() String gender = document.getElementsByTagName("gender").item(j).getTextContent(). String role = document.getElementsByTagName("role").item(j).getTextContent() System.out.println("Age:" + age); System.out.println("Name:" + name); System.out.println("Gender:" + name); System.out.println("Role:" + name); }} }}
Currently my actual results are displaying like below list.
Account Number: 123
Age:29
Name: Pankaj
Gender: Male
Role: Java Developer
Age:35
Name: Julie
Gender: Female
Role: Dotnet Developer
Account Number: 456
Age:29
Name: Pankaj
Gender: Male
Role: Java Developer
Age:35
Name: Julie
Gender: Female
Role: Dotnet Developer
But my expected results should be like this:
Account Number: 123
Age:29
Name: Pankaj
Gender: Male
Role: Java Developer
Account Number: 456
Age:35
Name: Julie
Gender: Female
Role: Dotnet Developer
Note: The XML in the question has been changed. The following is based on the original XML, with a root tag added, as shown at the end of the answer.
You need to use the XML structure when extracting the information from the DOM tree.
Basically, don't iterate the <Accountnumber>
elements, iterate the <AccountDetails>
elements of the document, then use the getElementsByTagName(...)
method on those Element
objects, not the method on the Document
object, to scan for nested elements.
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);
}
}
Output
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
The above was tested with the following 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>
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.