Почему я не могу получить атрибуты из корневого элемента с помощью JDOM - PullRequest
1 голос
/ 04 августа 2011

Давайте рассмотрим этот XML-файл:

<?xml version="1.0" encoding="UTF-8"?>
<root attribute="value">
    <element>myElement</element>
</root>

Я пытаюсь проанализировать файл, используя JDOM для извлечения имени и значения атрибута из корневого элемента.

Это код, который я с ума схожу для этой цели:

public static org.jdom.Document document;
public static org.jdom.Element root;

SAXBuilder sxb = new SAXBuilder();
try
{
    document = sxb.build(new File("file.xml"));
    root = document.getRootElement();

    List myList = root.getAttributes();
    Iterator x = myList.iterator();
    while(x.hasNext())
    {
        Attribute myAttribute = (Attribute)x.next();
        System.out.println("name : " +  myAttribute.getName() + " & value : " + myAttribute.getValue());
    }
}
catch(Exception e){
    e.printStackTrace();
}

Все отлично работает для этого XML-файла. Но когда я использую этот файл:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE rootElement PUBLIC "-//Project" "mydtd.dtd">
<root attribute="value">
    <element>myElement</element>
</root>

Я получаю Exception in thread "main" java.lang.NullPointerException

Как вы думаете, мне следует удалить DOCTYPE из файла xml перед его разбором и пропустить его после завершения разбора.

Или есть что-то еще, что я могу сделать в этой ситуации?

Спасибо

1 Ответ

4 голосов
/ 04 августа 2011

Или есть что-то еще, что я могу сделать в этой ситуации?

Да - никогда, никогда не делайте так:

catch(Exception e){}

Это не проблема с JDOM или атрибутами, это проблема с вашей общей обработкой исключений.

Вероятно, вы получаете NullPointerException, потому что XML-файл не был проанализирован должным образом, поэтому поле document равно null. Но поскольку вы поймали и проигнорировали исключение, вы не получите значимого сообщения об ошибке.

Переместите весь код, который у вас есть после блока catch, внутри блока try / catch, и вы получите более полезный отчет об ошибке.

...