Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> простой XML-парсер, использование рекурсии 
V
    Опции темы
Pitbul
  Дата 28.12.2010, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Fruzenshtein
*


Профиль
Группа: Участник
Сообщений: 231
Регистрация: 30.4.2008
Где: Киев

Репутация: нет
Всего: нет



Добрый день

Начал изучать взаимодействие JAVA с XML. Написал несколько простых сэмплов для разбора небольших XML-документов. Теперь решил написать код, который смог бы с помощью рекурсии двигаться от указанного узла по XML-дереву. Если он находит узел, то проверяет есть ли у него дочерние элементы, если true, то опять идет рекурсия. Else вытаскивает из узла NodeName и через двоеточие отображает NodeValue этого же узла.

Код

<?xml version="1.0" standalone="yes"?>
<event>
<name>XML - master class</name>
<place>forum.vingrad.ru</place>
<date>
    <day_of_weak>Tuesday</day_of_weak>
    <calendar>28.12.2010</calendar>
    <start_time>11:00</start_time>
</date>
</event>


А вот JAVA-код:

Код

import java.io.File;
import org.w3c.dom.*;
import javax.xml.parsers.*;

class LittleParser
{
    //Рекурсивная функция для движения по XML-дереву
    public void rekyr(Node n, int lvl)
    {
        NodeList nodes = n.getChildNodes();
        for(int i=0; i<nodes.getLength(); i++)
        {
            if (nodes.item(i).hasChildNodes())
            {
                System.out.println(nodes.item(i).getNodeName());
                rekyr(nodes.item(i), lvl+1);
            }
            else
            {
                if(nodes.item(i).getNodeType() == Node.ELEMENT_NODE)
                    System.out.println(nodes.item(i).getNodeName()+": "+nodes.item(i).getNodeValue());
            }
        }
         }
    
public static void main(String[] args)
{
    //Создаем объект класса LittleParser, чтобы
    //воспользоватся рекурсивной функцией
    LittleParser LP = new LittleParser();
    
    File xml_file = new File("D:\\testfile.xml");
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    try
    {
        DocumentBuilder builder = dbf.newDocumentBuilder();
        Document doc = builder.parse(xml_file);
        doc.normalize();
        
        //Для наглядности выбираем и отображаем название
        //корневого узла из нашего XML-документа
        Node root = doc.getFirstChild();
        System.out.println("В корне документа лежит: "+root.getNodeName());
        System.out.println();    
        
        //Применяем рекурсивную функцию к корневому элменту
        LP.rekyr(root, 0);
    }
    catch (Exception e)
    {
        System.out.println("Ошибка разбора документа.");
    }

}
}


У меня в результате выводит только:

В корне документа лежит: event

name
place
date
day_of_weak
calendar
start_time


Помогите пожалуйста отладить скрипт до такого результата обработки:

В корне документа лежит: event

name: XML - master class
place: forum.vingrad.ru
date
day_of_weak: Tuesday
calendar: 28.12.2010
start_time: 11:00

Огромное спасибо smile 
--------------------
### JAVA  ######  programming ###
PM MAIL WWW ICQ Skype   Вверх
nc30
Дата 2.1.2011, 17:42 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Интересующийся :)
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 24.6.2010
Где: Санкт-Петербург

Репутация: 5
Всего: 8



Неплохая статья на эту тему (с работающим примером).
PM MAIL   Вверх
Pitbul
  Дата 2.1.2011, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Fruzenshtein
*


Профиль
Группа: Участник
Сообщений: 231
Регистрация: 30.4.2008
Где: Киев

Репутация: нет
Всего: нет



nc30

Большое спасибо, думал, что уже не ответят на вопрос smile 
Прочитаю и извлеку нужные моменты для себя smile 
--------------------
### JAVA  ######  programming ###
PM MAIL WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1092 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.