开发者社区> 问答> 正文

如何正确解析

这是XML文件:

我需要解析它看起来像这样:

Van (VID-12345) Customers Adams, Maurice at 123 4th St, 13126 Baxter, Robert at 234 5th St, 13126 Total $17.00 Cart (VID-23456) Customers Charles, Steven at 345 6th St, 13126 Total $1.00 如何将其解析为建议的格式?我已经阅读了许多教程和示例,但是找不到可以帮助我的教程和示例。从我所读的书中,我最大的猜测是它与创建列表或创建要解析的对象有关。我也无法弄清楚如何计算“总计”(即单价*每个“包装”中所有商品的数量之和)。 public class MyHandler extends DefaultHandler {

@Override
public void startDocument() throws SAXException {
    System.out.println("---=== Report ===---");
}
@Override
public void endDocument() throws SAXException {
    System.out.println("---=== End of Report ===---");
}

public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
    if (qName.equalsIgnoreCase("van")) {
        System.out.println("Van (" + attributes.getValue("id") + ")");
    }
    if (qName.equalsIgnoreCase("customer")) {
        System.out.println("    Customer");
        System.out.println("        " + attributes.getValue("lastName") + ", " + attributes.getValue("firstName") + " at " + attributes.getValue("streetAddress") + ", " + attributes.getValue("zipCode"));
    }
    if (qName.equalsIgnoreCase("cart")) {
        System.out.println("Cart (" + attributes.getValue("id") + ")");
    }
    if (qName.equalsIgnoreCase("product")) {
        double sum = Double.parseDouble(attributes.getValue("unitPrice")) * Integer.parseInt(attributes.getValue("quantity"));
        System.out.println(sum);
    }
}

} 结果(不正确):

---=== Report ===--- Van (VID-12345) 10.0 4.0 Customer Adams, Maurice at 123 4th St, 13126 1.0 2.0 Customer Baxter, Robert at 234 5th St, 13126 Cart (VID-23456) 1.0 Customer Charles, Steven at 345 6th St, 13126 ---=== End of Report ===---

展开
收起
小六码奴 2019-10-12 18:48:11 4803 0
1 条回答
写回答
取消 提交回答
  • import org.dom4j.DocumentException; import org.dom4j.DocumentHelper; import org.dom4j.Element;

    import java.util.List;
    

    /** * @Author: panlf * @Date: 2019/9/16 9:27 / public class Dom4jTeset { public static void main(String[] args) throws DocumentException { Element root = DocumentHelper.parseText(XML).getRootElement(); List all = root.elements(); for (Element child : all) { System.out.println(child.getQName().getName()+" ("+ child.attribute("id").getValue()+")"); System.out.println(" Customer"); double sum=0; for (Element pack : child.elements()) { Element customer = pack.elements("customer").get(0); for (Element prod : pack.elements()) { if(prod.getQName().getName().equals("customer"))continue; String unitPrice = prod.attribute("unitPrice").getValue(); sum+=Double.parseDouble(prod.attribute("unitPrice").getValue()) Integer.parseInt(prod.attribute("quantity").getValue()); } System.out.println(" "+ customer.attribute("lastName").getValue()+", "+ customer.attribute("firstName").getValue()+ " at " + customer.attribute("streetAddress").getValue()+" "+ customer.attribute("zipCode").getValue()); } System.out.println(" Total"); System.out.println(" $"+sum); } }

    private static String XML="<?xml version=\"1.0\" ?>\n" +
            "<deliveries>\n" +
            "    <van id=\"VID-12345\">\n" +
            "        <package>\n" +
            "            <product taxable=\"true\" productName=\"Headphones\" isbn=\"123456\" unitPrice=\"10.00\" quantity=\"1\"/>\n" +
            "            <product taxable=\"false\" productName=\"Milk\" isbn=\"234567\" unitPrice=\"2.00\" quantity=\"2\"/>\n" +
            "            <customer lastName=\"Adams\" firstName=\"Maurice\" streetAddress=\"123 4th St\" zipCode=\"13126\" accountNumber=\"ACCT-54321\"/>\n" +
            "        </package>\n" +
            "        <package>\n" +
            "            <product taxable=\"true\" productName=\"Snickers\" isbn=\"345678\" unitPrice=\"1.00\" quantity=\"1\"/>\n" +
            "            <product taxable=\"false\" productName=\"Milk\" isbn=\"234567\" unitPrice=\"2.00\" quantity=\"1\"/>\n" +
            "            <customer lastName=\"Baxter\" firstName=\"Robert\" streetAddress=\"234 5th St\" zipCode=\"13126\" accountNumber=\"ACCT-65432\"/>\n" +
            "        </package>\n" +
            "    </van>\n" +
            "    <cart id=\"VID-23456\">\n" +
            "        <package>\n" +
            "            <product taxable=\"true\" productName=\"Snickers\" isbn=\"345678\" unitPrice=\"1.00\" quantity=\"1\"/>\n" +
            "            <customer lastName=\"Charles\" firstName=\"Steven\" streetAddress=\"345 6th St\" zipCode=\"13126\" accountNumber=\"ACCT-76543\"/>\n" +
            "        </package>\n" +
            "    </cart>\n" +
            "</deliveries>";
    

    }

    2019-10-12 18:48:36
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载