-3

javaのxmlファイルからすべての作成者を取得しようとしています ここにxmlコードがあります

<?xml version="1.0"?>
<map>
<authors>
    <author>testasdas</author>
    <author>Test</author>
</authors>
</map>

これが私がJavaで使用しているコードです

public static List<String> getAuthors(Document doc) throws Exception {
    List<String> authors = new ArrayList<String>();
    Element ed = doc.getDocumentElement();
    if (notExists(ed, "authors")) throw new Exception("No authors found");
    Node coreNode = doc.getElementsByTagName("authors").item(0);
    if (coreNode.getNodeType() == Node.ELEMENT_NODE) {
        Element coreElement = (Element) coreNode;
        NodeList cores = coreElement.getChildNodes();
        for (int i = 0; i < cores.getLength(); i++) {
            Node node = cores.item(i);
            if (node.getNodeType() == Node.ELEMENT_NODE) {
                Element e = (Element) node;
                String author = e.getElementsByTagName("author").item(i).getTextContent();
                Bukkit.getServer().broadcastMessage("here");
                authors.add(author);
            }
        }
    }
    return authors;
}

コードを実行しようとするとエラーがjava.lang.NullPointerException発生しますが、その理由はわかりません。

09.04 17:05:24 [サーバー] com.dcsoft.arenagames.map.XMLHandler.getMapData(XMLHandler.java:42) で
重大 09.04 17:05:24 [サーバー] com.dcsoft.arenagames.map.XMLHandler で重大。 getAuthors(XMLHandler.java:73)
09.04 17:05:24 [サーバー] SEVERE java.lang.NullPointerException

4

2 に答える 2

2

問題は、コードが<author>を使用してノードリストにインデックスを付けていることです。これは、タグiのすべての子をカウントし、そのうちのいくつかは要素ではありません。が返されたときに、 を呼び出そうとすると NPE が返されます。また、そのすべてのナビゲーションを行う必要もありません (これはちょっと疑わしく見え、確かに混乱を招きます)。代わりにこれを試してください:<authors><author>item(i)nullgetTextContent()

public static List<String> getAuthors(Document doc) throws Exception {
    List<String> authors = new ArrayList<String>();
    NodeList authorNodes = doc.getElementsByTagName("author");
    for (int i = 0; i < authorNodes.getLength(); i++) {
        String author = authorNodes.item(i).getTextContent();
        Bukkit.getServer().broadcastMessage("here");
        authors.add(author);
    }
    return authors;
}
于 2013-04-09T16:30:32.507 に答える