我需要解析一个包含大量产品的.xml文件,我需要它来返回在.xml文件中找到的所有产品。
但是,我只返回其中一个产品的代码,即使它们位于.xml文件中,也不会触及其他产品。
这是我的代码,有人可以帮我解决这个问题吗?
public void parse(String fileName) throws SAXException, IOException, XPathExpressionException {
File f = new File(fileName);
Document doc = builder.parse(f);
int prodCount = Integer.parseInt(path.evaluate("count(/inventory/products)", doc));
for (int i = 1; i <= prodCount; i++) {
String code = path.evaluate("/inventory/products[" + i + "]/product/code", doc);
String description = path.evaluate("/inventory/products[" + i + "]/product/desc", doc);
Double price = Double.parseDouble(path.evaluate("/inventory/products[" + i + "]/product/price", doc));
int quantity = Integer.parseInt(path.evaluate("/inventory/products[" + i + "]/product/quantity", doc));
Product p = new Product(code, description, price, quantity);
products.add(p);
}
}
}
谢谢!
答案 0 :(得分:1)
首先,您要计算products
元素的数量,而不是product
元素。这始终是1.正确的计数是
"count(/inventory/products/product)"
您还需要将索引放在子元素上,而不是父元素。
例如
"/inventory/products/product[" + i + "]/code"
不的
"/inventory/products[" + i + "]/product/code"
您可以直接使用product
节点来显着简化:
NodeList products = (NodeList) path.evaluate("/inventory/products/product", doc, XPathConstants.NODESET);
for (int i = 0; i < products.getLength(); i++) {
Node product = products.item(i);
String code = path.evaluate("code", product);
String description = path.evaluate("desc", product);
Double price = (Double) path.evaluate("price", product, XPathConstants.NUMBER);
Double quantity = (Double) path.evaluate("quantity", product, XPathConstants.NUMBER);
Product p = new Product(code, description, price, quantity.intValue());
}