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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Неправильно парсится XML 
V
    Опции темы
Xo6oT
Дата 6.4.2007, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Имеется следующий XML-документ:
Код
<?xml version="1.0" encoding="UTF-8"?>
<mega-license>
  <licenses unlimited="false">
    <superpersons count="0"/>
    <named count="0"/>
  </licenses>
</mega-license>

Сначала парсится XML-документ из файла следующим образом:
Код

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder db = factory.newDocumentBuilder();
Document doc = db.parse(file);

Затем я пытаюсь пробежаться по нему следующим образом:
Код

Node licenseNode = document.getFirstChild().getFirstChild();

Насколько я понимаю, document.getFirstChild() должен вернуть узел mega-license, он его и возвращает [mega-license: null]. А вот взятие getFirstChild() от этого узла уже возвращает [#text: ]. Если же убрать переводы строк и записать XML в одну строчку, все парсится корректно. Первым ребенком mega-license будет [licenses: null].

Вопрос - что нужно сделать, чтобы нормально парсилась любая XML, а не только записанная в одну строку?
PM MAIL   Вверх
hamsterKSU
Дата 6.4.2007, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Xo6oT @  6.4.2007,  12:27 Найти цитируемый пост)
Насколько я понимаю, document.getFirstChild() должен вернуть узел mega-license

вернет он тебе 
Код

<?xml version="1.0" encoding="UTF-8"?>


PM MAIL ICQ   Вверх
Xo6oT
Дата 6.4.2007, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(hamsterKSU @ 6.4.2007,  14:06)
Цитата(Xo6oT @  6.4.2007,  12:27 Найти цитируемый пост)
Насколько я понимаю, document.getFirstChild() должен вернуть узел mega-license

вернет он тебе 
Код

<?xml version="1.0" encoding="UTF-8"?>

Нет, я проверял, он возвращает именно [mega-license: null]. И дебагом смотрел, и просто выводил в консоль.
PM MAIL   Вверх
Шмель
Дата 6.4.2007, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Document Traversal спасёт отца русской демократии

test.xml:
Код

<?xml version="1.0" encoding="UTF-8"?>
<mega-license>
  <licenses unlimited="false">
    <superpersons count="0"/>
    <named count="0"/>
  </licenses>
</mega-license>


Код

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(new File("./test.xml"));
NodeIterator iter = ((DocumentTraversal)doc).createNodeIterator(
          doc, NodeFilter.SHOW_ELEMENT, null, true);
Node n = null;
while ((n = iter.nextNode()) != null)
       System.out.println(n);


Кратко - итератору будут доступны только узлы, являющиеся элементами. За деталями - в спецификацию DOM Level 2 Traversal and Range
--------------------
будешь на Земле - заходи
PM MAIL ICQ   Вверх
batigoal
Дата 8.4.2007, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


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

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



Либо просто проверять тип узла, пропуская пустые текстовые.


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

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

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


 




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


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

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