簡體   English   中英

使用Java從子節點Xml獲取所有值

[英]get all values from child node Xml with Java

我正在嘗試使用Java解析XML文件以使其制成excel文件
而且我不明白如何檢索這些名稱的所有子節點?

   <Products>
        <companies>
            <name>Al Rawabi</name>
            <name>Al Rifai</name>
            <name>Colgate-Palmolive</name>
            <name>Danone (Nutrition)</name>
            <name>Henkel</name>
        </companies>
    <Products>

我試圖用這種方法來做,但是結果是我得到了一個空的名字列表。

    NodeList ListOfProducts = xmlDoc.getElementsByTagName("Products"); //first we need to find total number of Products blocks
    int totalProducts = ListOfProducts.getLength();
        System.out.println("Total no of Products : " + totalProducts);
    for(int s = 0; s < ListOfProducts.getLength(); s++)
    {
        Node ProductsNode = listOfProducts.item(s);
        System.out.println("Products number : " + s);
        if (ProductsNode.getNodeType() == Node.ELEMENT_NODE)
        {
            Element ProductElement = (Element) ProductsNode;
            NodeList CompanyList = ProductElement.getElementsByTagName("companies"); // find node companies
            System.out.println("companies number : " + CompanyList.getLength());
            for(int cl = 0; cl < CompanyList.getLength(); cl++) {
                NodeList CompanyNameList = CompanyList.item(cl).getChildNodes();
                for (int j = 0; j < CompanyNameList.getLength(); j++) {
                    Node childNode = CompanyNameList.item(j);
                    if ("name".equals(childNode.getNodeName())) {
                        for (int nl = 0; nl < CompanyNameList.getLength(); nl++) {
                            Element CompanyNameElement = (Element) CompanyNameList.item(nl);
                            NodeList textFNList = CompanyNameElement.getChildNodes();
                            System.out.println("Company: " + nl + " :" + (textFNList.item(0)).getNodeValue().trim());
                            CompaniesNames.add((textFNList.item(0)).getNodeValue().trim());
                        }
                    }
                }
            }
        }// end of if clause
    }// end of for loop with s var
//load the xml file
function loadDoc(){
    //create the xml request
    var xhttp = new XMLHttpRequest();
    xhttp.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
           myFunction(this);
        }
    };
    //open and send the request
    xhttp.open("GET", "filename.xml", true);
    xhttp.send();
}

//print the xml data in html
function myFunction(xml) {
    var i;
    var xmlDoc = xml.responseXML; //xml file loaded
    var x = xmlDoc.getElementsByTagName("companies");
    //loop through xml element
    for (i = 0; i < x.length; i++) {
        x[i].getElementsByTagName("name")[0].childNodes[0].nodeValue;
    }
}

這是您要執行的JavaScript版本。 希望您可以在Java中使用它!

下面是如何在XPath和VTD-XML中進行操作。 請注意,我是VTD-XML的作者,因此我的觀點可能有偏見。

import com.ximpleware.*;

public class extractName{
   public static void main(String s[]) throws VTDException{

          VTDGen vg = new VTDGen();
          if (!vg.parseFile("input.xml",false))
             return false;
          VTDNav vn = vg.getNav();
          AutoPilot ap =new AutoPilot(vn);
          ap.selectXPath("/Products/companies/names/text()");
          int i=0;
          while((i=ap.evalXPath())!=-1){
              System.out.println(" name is ===>"+vn.toString(i));
          }

   }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM