如何使用Java按顺序读取相同的标记名值

如何使用Java按顺序读取相同的标记名值,java,xml,dom,Java,Xml,Dom,Java代码: 目前我的实际结果如下表所示 账号:123 年龄:29 姓名:Pankaj 性别:男 角色:Java开发人员 年龄:35 姓名:朱莉 性别:女 角色:Dotnet开发人员 账号:456 年龄:29 姓名:Pankaj 性别:男 角色:Java开发人员 年龄:35 姓名:朱莉 性别:女 角色:Dotnet开发人员 但我的预期结果应该是这样的: 账号:123 年龄:29 姓名:Pankaj 性别:男 角色:Java开发人员 账号:456 年龄:35 姓名:朱莉 性别:女 角色:Dotn

Java代码:

目前我的实际结果如下表所示

账号:123 年龄:29 姓名:Pankaj 性别:男 角色:Java开发人员 年龄:35 姓名:朱莉 性别:女 角色:Dotnet开发人员

账号:456 年龄:29 姓名:Pankaj 性别:男 角色:Java开发人员 年龄:35 姓名:朱莉 性别:女 角色:Dotnet开发人员

但我的预期结果应该是这样的:

账号:123 年龄:29 姓名:Pankaj 性别:男 角色:Java开发人员

账号:456 年龄:35 姓名:朱莉 性别:女 角色:Dotnet开发人员注意:问题中的XML已更改。以下内容基于原始XML,并添加了根标记,如答案末尾所示

从DOM树提取信息时,需要使用XML结构

基本上,不要迭代元素,而是迭代文档的元素,然后使用getElementsByTagName。。。方法,而不是文档对象上的方法,以扫描嵌套元素

 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); 

 }} }}
使用以下XML对上述内容进行了测试:

123 29 潘卡吉 男性的 Java开发者 456 35 朱莉 女的 网络开发者
不知道你在这里期待什么。这就是上面发布的预期结果吗?首先,您的XML格式不正确。必须包含根元素,在该元素下可以有多个同名节点。您不能有两个,除非它包装在一个根元素下。@NaveenBharadwaj我已经更新了XML、预期结果和实际结果。你现在能查一下吗。
 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); 

 }} }}
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);
    }
}