Java 解析xml不循环?

Java 解析xml不循环?,java,xml,Java,Xml,我需要解析一个包含大量产品的.xml文件,并需要它返回在.xml文件中找到的所有产品 但是,我的代码只返回这些产品中的一个,而不涉及其他产品,即使它们在.xml文件中 这是我的密码,有人能帮我弄清楚吗 public void parse(String fileName) throws SAXException, IOException, XPathExpressionException { File f = new File(fileName); Document doc =

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

    }

  }
}
public void parse(字符串文件名)抛出SAXException、IOException、XPathExpressionException{
文件f=新文件(文件名);
文档doc=builder.parse(f);
int prodCount=Integer.parseInt(path.evaluate(“count(/inventory/products)”,doc));

对于(int i=1;i首先,您计算的是
产品
元素的数量,而不是
产品
元素的数量。这始终是1。正确的计数是

"count(/inventory/products/product)" 
您还需要将索引放在子元素上,而不是父元素上

比如说

"/inventory/products/product[" + i + "]/code"
不是

通过直接使用
产品
节点,可以显著简化这一过程:

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());
}
NodeList products=(NodeList)path.evaluate(“/inventory/products/product”,doc,XPathConstants.NODESET);
对于(int i=0;i
只给了我一个产品的完全相同的输出。我没有发现另外一个问题(
计数(/inventory/products)
应该是
计数(/inventory/products/products)
)。我编辑了答案,并在最后添加了改进建议。
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());
}