从XML文件检索字符串时出现NullPointerException错误

时间:2016-02-15 19:44:48

标签: xml nullpointerexception jdom-2

鉴于我并不完全确定如何说出来,我的头衔并不是那么好,但问题在于我创造了以下方法:

private static int createItem(Document xml) throws JDOMException, IOException{
    Element element = xml.getRootElement();
    Namespace ns = element.getNamespace();

    String itemName = xml.getRootElement().getChild("itemName", ns).getText();

    Element newItem = new Element("createItem", ns);
    newItem.addContent(new Element("shopKey", ns).addContent(key));
    newItem.addContent(new Element("itemName", ns).addContent(itemName));

    Document itemIDResponse = post("/createItem", new Document(element));
}

目的是创建一个项目并准备它以将其发送到POST请求。我有一种感觉,虽然我的整个方法都是错误的,但是它给我带来了一些我已经修复的错误,除非现在最后还有一个错误就是:

Exception in thread "main" java.lang.NullPointerException
        at TestPostRequester.createItem(TestPostRequester.java:56)
        at TestPostRequester.main(TestPostRequester.java:38)

其中突出显示第56行:

String itemName = xml.getRootElement().getChild("itemName", ns).getText();

以及在我的main方法中调用createItem的方法:

int itemID = createItem(xmlDoc);

我的XML文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<items xmlns="website">
<item>
    <itemID>1</itemID>
    <itemName>CupA</itemName>
    <itemURL>none</itemURL>
    <itemPrice>50</itemPrice>
    <itemStock>15</itemStock>
    <itemDescription>
        <document>
            A <italics> beautiful and authentic</italics> cup.Containing the                  following elements:
            <list>
                <item>It's rich in history</item>
                <item>Eccentrically beautiful</item>
                <item>Organic and 100%
                                        <bold>vegan</bold>
                </item>
            </list>
    </document>
</itemDescription>

1 个答案:

答案 0 :(得分:0)

您缺少XML层次结构中的级别。你有什么:

String itemName = xml.getRootElement()
         .getChild("itemName", ns)
         .getText();

你应该拥有什么:

String itemName = xml.getRootElement()
         .getChild("item", ns)
         .getChild("itemName", ns)
         .getText();

XPath也可以使用....你应该考虑一下。