为什么我无法使用JDOM从根元素中获取属性

时间:2011-08-04 12:05:25

标签: java xml root jdom

让我们考虑一下这个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

你认为我应该在解析它之前从xml文件中删除DOCTYPE,并在完成解析后将其过去。

或者在这种情况下我还能做些什么呢?

由于

1 个答案:

答案 0 :(得分:4)

  

或者在这种情况下我还能做些什么呢?

是的 - 永远不要这样做:

catch(Exception e){}

这不是JDOM或属性的问题,这是一般异常处理的问题。

由于XML文件无法正确解析,因此您可能获得NullPointerException,因此document字段为null。但是因为你抓住并忽略了异常,所以你没有得到有意义的错误信息。

在try / catch块内的 catch块之后移动当前拥有的所有代码,您将获得更有用的错误报告。