我正在尝试解析一个XML文件,使用Java来制作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
答案 0 :(得分:0)
//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中使用它!
答案 1 :(得分:0)
下面是如何在XPath和VTD-XML中执行此操作。请注意,我是VTD-XML的作者,所以我的pov可能有偏见。
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));
}
}
}