Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / как нормально парсит в xml <element Name/> / 14 сообщений из 14, страница 1 из 1
10.10.2013, 16:22
    #38423212
shms
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как нормально парсит в xml <element Name/>
Всем Привет! Есть такой xml
<?xml version="1.0" encoding="WINDOWS-1251"?>
<students>
<name>Oleg</name>
<group>15</group>
<addInfo/>
</students>

Когда парсю ошибка java.lang.NullPointerException на addInfo элемент. Как здес нормально парсит xml. Как проверить
что элемент <addInfo/> такой даже не знаю как назвать таких элементы :)). С Dom парсером
...
Рейтинг: 0 / 0
10.10.2013, 16:27
    #38423228
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как нормально парсит в xml <element Name/>
XML никак не связан с NullPointerException.
NullPointerException вызван вашим кодом.
...
Рейтинг: 0 / 0
10.10.2013, 16:36
    #38423256
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как нормально парсит в xml <element Name/>
shms, для Java написана огромная туча XML-парсеров, и объект DomDocument не кодил
разве что ленивый. Так что без кода - незачот и понять почему у тебя лезет NPE никто
не сможет.

P.S. Ну... должен быть где-то метод getFirstChild который можно проверить на null. Помогло? не?
...
Рейтинг: 0 / 0
10.10.2013, 16:40
    #38423267
shms
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как нормально парсит в xml <element Name/>
Blazkowicz,
Вот мой код

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
    public static void main(String[] args) {
        String xmlfile2 = "<?xml version=\"1.0\" encoding=\"WINDOWS-1251\"?><students><name>Oleg</name><group>15</group><addInfo/></students>";
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder;
        HashMap<String, String> hashMap = null;
        try {
            hashMap = new HashMap<String, String>();
            builder = factory.newDocumentBuilder();
            // Use String reader  
            Document doc = builder.parse(new InputSource(new StringReader(xmlfile2)));
            NodeList kids = doc.getElementsByTagName("students");
            // Element
            for (int i = 0; i < kids.getLength(); i++) {
                Node n = kids.item(i);
                if (n.getNodeType() == Node.ELEMENT_NODE) {
                    NodeList elements = n.getChildNodes();
                    for (int j = 0; j < elements.getLength(); j++) {
                        Node item = elements.item(j);
                         hashMap.put(item.getNodeName(), item.getFirstChild().getNodeValue());  // здес ошибка на null 
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println(hashMap.toString());
    }


Result:java.lang.NullPointerException
null
{name=Oleg, group=15}
Что здес нето написано?
...
Рейтинг: 0 / 0
10.10.2013, 16:48
    #38423288
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как нормально парсит в xml <element Name/>
если у item нет детей, то
item.getFirstChild() вернет null и вызов метода на null приводит к NPE.
Основы Java. К XML отношения не имееют так же как и к DOM.
...
Рейтинг: 0 / 0
10.10.2013, 17:03
    #38423320
shms
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как нормально парсит в xml <element Name/>
Blazkowicz,

Спасибо помогло! :)
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
03.05.2016, 10:04
    #39228553
chyngyz_zh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как нормально парсит в xml <element Name/>
авторесли у item нет детей, то
item.getFirstChild() вернет null и вызов метода на null приводит к NPE.
Основы Java. К XML отношения не имееют так же как и к DOM.

авторBlazkowicz,

Спасибо помогло! :)

Привет всем!

Как именно помогло, и как решить подобную ошибку?
P.S. Только начал изучать Java, и чтение статей про NPE не помогло :-(
Вот код Java:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
package wstestclient;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.File;
 
public class WsTestClient {
    public static void main(String[] args)
    {
        try
        {
            File xmlFile = new File("D:\\WebApp\\NewServlet.xml");
            DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
            Document document = documentBuilder.parse(xmlFile);
            document.getDocumentElement().normalize();
 
            NodeList nodeList = document.getElementsByTagName(document.getDocumentElement().getChildNodes().item(1).getNodeName());
            for(int tmp = 0; tmp < nodeList.getLength(); tmp++)
            {
                Node node = nodeList.item(tmp);
                if(node.getNodeType() == Node.ELEMENT_NODE)
                {
                    Element element = (Element)node;
                    System.out.println(element.getElementsByTagName("author").item(0).getChildNodes().item(0).getNodeValue()); //ошибка здесь
                }
            }
        }
        catch (Exception e)
        {
            System.out.println(e.getLocalizedMessage());
            e.printStackTrace();
        }
    }
}



А это файл NewServlet.xml (папка D:\WebApp), который надо прочитать:
Код: xml
1.
2.
3.
4.
5.
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<blogs>
  <author>Pavel</author>
  <language>Java</language>
</blogs>
...
Рейтинг: 0 / 0
03.05.2016, 10:15
    #39228555
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как нормально парсит в xml <element Name/>
chyngyz_zh,

Никогда так не пишите.
Код: java
1.
element.getElementsByTagName("author").item(0).getChildNodes().item(0).getNodeValue()



По крайней мере пока вы начинающий разработчик. Подружитесь с рефакторингом Introduce Variable.

Код: java
1.
2.
3.
4.
5.
NodeList authors = element.getElementsByTagName("author")
Node firstAuthor = authors.item(0);
NodeList firstAuthorChildren = firstAuthor.getChildNodes();
Node firstAuthorChild = firstAuthorChildren.item(0); 
String  value = firstAuthorChild.getNodeValue();
...
Рейтинг: 0 / 0
03.05.2016, 10:49
    #39228562
chyngyz_zh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как нормально парсит в xml <element Name/>
Blazkowicz,

Хорошо.
Но как же с ошибкой java.lang.NullPointerException? Он же все равно будет выходить.
...
Рейтинг: 0 / 0
03.05.2016, 10:52
    #39228563
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как нормально парсит в xml <element Name/>
chyngyz_zhХорошо.
Но как же с ошибкой java.lang.NullPointerException? Он же все равно будет выходить.
Посмотрите на ваш код и на ваш XML. Код разбитый на переменные делает очевидным тот факт что у тэга author ожидаются дети. Где они в вашем XML?
...
Рейтинг: 0 / 0
03.05.2016, 10:56
    #39228568
chyngyz_zh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как нормально парсит в xml <element Name/>
Код:
Код: java
1.
2.
3.
4.
5.
NodeList authors = element.getElementsByTagName("author")
Node firstAuthor = authors.item(0);
NodeList firstAuthorChildren = firstAuthor.getChildNodes(); //здесь возникает ошибка java.lang.NullPointerException
Node firstAuthorChild = firstAuthorChildren.item(0); 
String  value = firstAuthorChild.getNodeValue();



Тег "author" есть в XML файле. Я не пойму, почему тогда возникает такая ошибка...
...
Рейтинг: 0 / 0
03.05.2016, 11:07
    #39228573
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как нормально парсит в xml <element Name/>
chyngyz_zh,

Ну, у вас выше это кода ещё лапша какая-то накодирована. Приведите код в порядок и используйте пошаговую отладку в IDE. Отлаживать код за вас особого желания нет.
...
Рейтинг: 0 / 0
03.05.2016, 11:27
    #39228580
Valery Shiskin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как нормально парсит в xml <element Name/>
chyngyz_zh,

Element element = (Element)node; - соответствует тэгу "author", а вы из него пытаетесь получить опять список узлов с именем "author". Тогда,

element.getElementsByTagName("author")

возвращает пустой список и, соответственно, применение к пустому списку item(0) null.
...
Рейтинг: 0 / 0
03.05.2016, 12:43
    #39228597
chyngyz_zh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как нормально парсит в xml <element Name/>
Blazkowicz, Valery Shiskin,

Благодарю!
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / как нормально парсит в xml <element Name/> / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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