1

この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を削除し、解析が終了した後にそれを貼り付ける必要があると思いますか。

または、この状況で私ができることが他にありますか?

ありがとう

4

1 に答える 1

4

または、この状況で私ができることが他にありますか?

はい-決して、これを行うことはありません:

catch(Exception e){}

これはJDOMまたは属性の問題ではなく、一般的な例外処理の問題です。

NullPointerExceptionXMLファイルが適切に解析されなかったために、が表示されている可能性があります。そのため、documentフィールドはnullです。ただし、例外をキャッチして無視したため、意味のあるエラーメッセージは表示されません。

現在使用しているすべてのコードをcatchブロックの、try / catchブロック内に移動すると、より便利なエラーレポートが表示されます。

于 2011-08-04T12:08:31.157 に答える