Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / как грамотно распотрошить дерево DOM / 5 сообщений из 5, страница 1 из 1
21.03.2007, 12:44:04
    #34405483
как грамотно распотрошить дерево DOM
Джентльмены, проблема довольно приземленная средствами явы юзаю XML...

имется XML фаил:
<?xml version="1.0" encoding="UTF-8"?>
<AdressBook total="2">
<person>
Ivanov
</person>
</AdressBook>


соответственно работаю следующими классами


import java.io.*;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;


выглядит это так:


File f = new File("data.xml");//data.xml находится в папке проэкта в workspace
Document doc;

try {
DocumentBuilderFactory dbf =
DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
doc = db.parse(f);

Node node = doc.getFirstChild();
System.out.println(node.getNodeName());
Node node1 = node.getFirstChild();
System.out.println(node1.getNodeName());
NodeList children = node.getChildNodes();
Node node2 = children.item(1);
System.out.println(node2.getNodeName());
} catch (Exception e){
System.out.println("ERROR!");
}


Output выдаёт в первый раз AdressBook во второй раз #text, а в третий как не странно person... Причем node2.NodeValue null...

В чем проблема???
...
Рейтинг: 0 / 0
21.03.2007, 12:59:31
    #34405540
Penkov Vladimir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как грамотно распотрошить дерево DOM
откройте для себя jdom и не мучайтесь.

согласно спецификации на xml распарсилось все верно. почитайте хорстмана - у него есть глава про xml, по моему во 2ом томе.
...
Рейтинг: 0 / 0
23.03.2007, 15:59:07
    #34412157
JIRO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как грамотно распотрошить дерево DOM
Выдаёт #text потому что это пробел между тегами. От них можно избавится только, если использовать DTD и устанавливать на фабрике setIgnoringElementContentWhitespace(true). Без DTD этот апроуч не будет работать. Также не забудь установить setValidating(true).
...
Рейтинг: 0 / 0
23.03.2007, 16:13:27
    #34412206
ТимоН
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как грамотно распотрошить дерево DOM
автороткройте для себя jdom и не мучайтесь.
+1000000000
...
Рейтинг: 0 / 0
24.03.2007, 11:57:35
    #34413288
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как грамотно распотрошить дерево DOM
Да всё нормально работает. Только значение текстовой ноды надо получать немножко иначе.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
            DocumentBuilderFactory dbf =
            DocumentBuilderFactory.newInstance();
            DocumentBuilder db = dbf.newDocumentBuilder();
            doc = db.parse(f);

            Node node = doc.getFirstChild();         // Возвращает AddresBook
            System.out.println(node.getNodeName());

            Node node1 = node.getFirstChild();    // Возвращает person
            System.out.println(node1.getNodeName());

            Node nodetext=node.getFirstChild(); // Возвращает содержимое person в виде Text
            System.out.println(nodetext.getTextContent());
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / как грамотно распотрошить дерево DOM / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]