Java 解析xml不循环?
我需要解析一个包含大量产品的.xml文件,并需要它返回在.xml文件中找到的所有产品 但是,我的代码只返回这些产品中的一个,而不涉及其他产品,即使它们在.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 =
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());
}