解析xml不循环?

时间:2016-11-26 20:01:35

标签: java xml

我需要解析一个包含大量产品的.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);

    }

  }
}

谢谢!

1 个答案:

答案 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());
}