Как разобрать этот XML-файл - PullRequest
0 голосов
/ 29 октября 2011

Я новичок в программировании на 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>

Я написал следующий код для извлечения. Но я получаю данные только в порядке1, а не в порядке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())));
      }

Ответы [ 2 ]

4 голосов
/ 29 октября 2011

Я могу дать вам не одно, не два, а три направления для разбора этого XML (есть и другие, но, скажем, они самые общие):

Судя по размеру вашего XML-документа, я бы, вероятно, пошел на анализ DOM, который будет самым простым в реализации и использовании (но если вам приходится иметь дело с большими файлами, посмотрите на SAX для чтения -только манипуляции и StAX для чтения и записи).

0 голосов
/ 29 октября 2011

Причина, по которой вы получаете только элементы "Order1", заключается в следующем:

  • Вы блокируете узел "day1".
  • Вы получаете элементы "customer" по имени тегакоторый возвращает 2 элемента.
  • Вы извлекаете первый элемент и печатаете его значение, и, следовательно, второй «клиент» игнорируется.

При работе с DOM будьте готовы раскрутить несколькоциклы для извлечения данных.Кроме того, вы немного сбиты с толку, когда дело доходит до представления вашей схемы.Вам действительно не нужно называть «elements» как «day1» / «order1» и т. Д. В XML это может быть просто выражено наличием нескольких элементов «day» или «order», которые, в свою очередь, автоматически обеспечивают порядок.Пример XML будет выглядеть следующим образом:

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

Теперь получение элементов "день" - это простой вопрос:

  • Поиск элементов "день" по имени тега
  • Для каждого элемента "day"
    • Поиск элемента "order" по имени тега
    • Для каждого элемента "order"
      • Распечатка значения "customer" /"адрес" и т. д.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...