当前位置: 首页 > 知识库问答 >
问题:

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

侯池暝
2023-03-14
  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>
 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); 

 }} }}

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

账号:456
年龄:35
姓名:Julie
性别:女性
角色:Dotnet开发人员

共有1个答案

慎峻
2023-03-14

注意:问题中的XML已经更改。以下内容基于原始XML,添加了根标记,如答案末尾所示。

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

基本上,不要迭代 元素,而是迭代文档的 元素,然后对那些元素对象使用GetElementsByTagName(...)方法,而不是对文档对象使用GetElementsByTagName(...)方法来扫描嵌套元素。

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

 类似资料:
  • 问题内容: 如何使用python以相反的顺序读取文件?我想从最后一行读取文件。 问题答案: 在Python 3中:

  • 我正在进行rpc调用签名,为了使服务器接受我们的API调用,我们需要使用RSAPrivateKey对http mime头进行签名。服务器端代码用JAVA编写,并使用“SHA256withRSA/PSS”验证签名。 我的问题是我从JAVA和c openssl代码得到了不同的签名哈希。所以问题是,openssl是否有可能生成与JAVA相同的签名哈希? JAVA代码: c代码:

  • 问题内容: 如何使用dom parser java在xml中解析相同的名称标签? 我有以下要使用Java中的dom解析器解析的xml文件。 问题答案: 但我建议使用XPath

  • 问题内容: 给定上面的xml文件,我将如何检索标签内所有标签的列表?我想获取“名称”的所有值以及标签之间的数字值。像这样: 问题是我不知道会有多少个附加标签。可能没有,也可能有20。我需要某种方法来对它们全部进行计数,然后删除信息。 问题答案: 这是一个使用JDK执行查询的示例。它假定变量包含您的XML文档。

  • 问题内容: 我有事。URL中的XML: 我想同时显示两个PhonebookEntry值(名字,姓氏,地址)。当前,我的代码仅显示John Smith的PhonebookEntry(最后一个条目)。这是我的代码。 ParsingXML.java ExampleHandler.java ParsedExampleDataSet.java 我是Java和android开发的新手,在此先感谢您的帮助!:)

  • 我有一个亚马逊S3的postdata预签名网址。我想用它在一个空手道功能文件上传一个文件(说:pdf) 下面是一个示例Curl请求,我需要使用空手道POST请求执行它 我从服务器得到一个响应(具有预签名),并在功能文件中使用下面的代码 我试过了 我看到空手道日志的请求格式是:18:29:08.560[ForkJoinPool-1-worker-3]DEBUG-com。凭直觉。空手道-请求: 我看到