【问题标题】:How to parse this XML file如何解析这个 XML 文件
【发布时间】:2011-10-29 07:51:49
【问题描述】:

我是 java 编程新手,我刚刚学会了如何解析 xml 文件。但我不知道如何解析这个 xml 文件。请帮助我提供有关如何获取标签 day1 及其内部标签 order1,order2 的代码

<RoutePlan>
<day1>
    <Order1>
    <customer> XYZ</customer>
    <address> INDIA </address>
    <data> 10-10-2011 </data>
    <time> 9.30 A.M </time>
    </Order1>

    <Order2>
    <customer> ABC </customer>
    <address> US </address>
    <data> 10-10-2011 </data>
    <time> 10.30 A.M </time>
    </Order2>
</day1>

我编写了以下代码来检索。但我只是按顺序获取数据,而不是按顺序 2

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
      DocumentBuilder db = dbf.newDocumentBuilder();
      Document document = db.parse(file);
      document.getDocumentElement().normalize();
      System.out.println("Root Element: "+document.getDocumentElement().getNodeName());
      NodeList node =  document.getElementsByTagName("day1");

      for(int i=0;i<node.getLength();i++){
          Node firstNode = node.item(i);
          Element element = (Element) firstNode;
          NodeList customer = element.getElementsByTagName("customer");
          Element customerElement = (Element) customer.item(0);
          NodeList firstName = customerElement.getChildNodes();
          System.out.println("Name: "+((firstName.item(0).getNodeValue())));

          NodeList address = element.getElementsByTagName("address");
          Element customerAddress = (Element) address.item(0);
          NodeList addName = customerAddress.getChildNodes();
          System.out.println("Address: "+((addName.item(0).getNodeValue())));

          NodeList date = element.getElementsByTagName("date");
          Element customerdate = (Element) date.item(0);
          NodeList dateN = customerdate.getChildNodes();
          System.out.println("Address: "+((dateN.item(0).getNodeValue())));


          NodeList time = element.getElementsByTagName("time");
          Element customertime = (Element) time.item(0);
          NodeList Ntime = customertime.getChildNodes();
          System.out.println("Time: "+((Ntime.item(0).getNodeValue())));
      }

【问题讨论】:

  • “请帮我提供代码。” 请提出一个(具体的)问题。请表现出一些努力。请解释你卡在哪里。 SO 不是代码生成机器。
  • How can I parse XML using Java? 的可能重复项
  • 看我的帖子;我从评论开始,但因为太长而无法放入评论,因此更新帖子。

标签: java xml-parsing


【解决方案1】:

我可以给你解析这个 XML 的不是一个,不是两个,而是三个方向(还有更多,但假设它们是最常见的):

  • DOM -> 两个不错的资源:@​​987654321@ 和 here
  • SAX -> 官网快速入门:here
  • StAX -> 很好的介绍:here

从您的 XML 文档的大小来看,我可能会进行 DOM 解析,这将是最容易实现和使用的(但如果您必须处理更大的文件,请查看 SAX 以供阅读- 仅用于读取和写入的操作和 StAX)。

【讨论】:

  • @user1019525 没问题,如果您在实施时遇到任何问题,请随时询问。
  • Roseindia 不是 IMO 的好资源。他们是内容窃贼,经常展示过时/错误的内容。
  • @SanjayT.Sharma 在这个案例中给出的例子和说明还不错,相反,所以我认为将他引导到那里并没有什么害处。
  • 初学者无法区分好坏,作为帮助的人,警告他们总是一个好主意,我已经这样做了。 YMMV。
  • @talnicolas 嗨,我现在只能获取 order1 的值,但不能获取剩余的值。我的代码有什么问题吗
【解决方案2】:

您只获得“Order1”元素的原因是:

  • 您锁定“day1”节点。
  • 您通过返回 2 个元素的标签名称检索“客户”元素。
  • 您检索第一个元素并打印其值,因此第二个“客户”被忽略。

使用 DOM 时,请准备好启动多个循环来检索数据。此外,在表示您的模式时,您有点被误导了。您真的不需要将“元素”命名为“day1”/“order1”等。在 XML 中,这可以通过多个“day”或“order”元素来简单地表示,这些元素又会自动强制排序。 XML 示例如下所示:

<route-plan>
    <day>
        <order>
            <something>
        </order>
    </day>
    <day>
        <order>
            <something>
        </order>
    </day>
</route-plan>

现在检索“day”元素很简单:

  • 按标签名称查找“day”元素
  • 对于每个“日”元素
    • 按标签名称查找“订单”元素
    • 对于每个“订单”元素
      • 打印出“客户”/“地址”等的值

【讨论】:

  • 你能告诉我一些网站或书籍,我可以在其中找到有关 java 中所有主题的详细描述
  • Java 非常庞大,尤其是考虑到它与其他技术(XML、数据库等)的交互。你有什么特别的想法吗?您是关心“Java 是核心语言”还是关注它周围的所有技术?
  • 我想要技术。其实我什至不知道java被包围的技术是什么,我也想完美地学习基础
  • this page 开始,它提供了围绕Java 的所有技术的要点以及basics。完成该页面上的所有内容后,您应该对 Java 中的操作方式有一个很好的了解。
猜你喜欢
  • 1970-01-01
  • 2017-12-13
  • 2012-08-11
  • 1970-01-01
  • 2012-06-08
  • 1970-01-01
  • 1970-01-01
  • 2013-02-17
  • 1970-01-01
相关资源
最近更新 更多