-1

我正在尝试使用 Java 中的 Dom Parser 解析 XML 数据。

我成功解析了以下 XML 数据 -

<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>

我使用了HERE中的代码。

但是当我试图解析以下 XML 数据时 -

<body message="hello">
<mainData data1="XYZ" data2="ABC" data3="PQR"></mainData>
</body>

它给出了空指针异常。

两种 XML 都有不同的结构,第一个很常见,但第二个我不知道。

请帮助我使用 Java 解析第二种结构中的 XML。

我的代码是 -

try

{
    String strUrl = "http://someurl";
    URL url = new URL(strUrl);
    InputStream inStream = url.openStream();

    DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
    Document doc = dBuilder.parse(inStream);

    NodeList nList = doc.getElementsByTagName("body");

    for (int i = 0; i < nList.getLength(); i++) 
    {
           Node nNode = nList.item(i);
           if (nNode.getNodeType() == Node.ELEMENT_NODE)
           {
              Element eElement = (Element) nNode;

              NodeList nListRoute = eElement.getElementsByTagName("mainData");
              for (int j = 0; j < nListRoute.getLength(); j++)
              {
                   Node nNodeRoute = nListRoute.item(j);
                   if (nNodeRoute.getNodeType() == Node.ELEMENT_NODE)
                   {
                      Element eElementRoute = (Element) nNodeRoute;

                      NodeList nlList = eElementRoute.getElementsByTagName("data1").item(0).getChildNodes();
                      Node nValue = (Node) nlList.item(0);
                      System.out.println("data1 : " + nValue.getNodeValue());
                  }                        
             }                           
          }                
    }           
}
catch (Exception e) 
{
    e.printStackTrace();
}

我得到了错误 -

java.lang.NullPointerException

在行“ NodeList nlList = eElementRoute.getElementsByTagName("data1").item(0).getChildNodes();

4

2 回答 2

2

好吧,您正在尝试获取元素,并且正在获取属性。所以我的建议是,尝试清除基本原理,如果你想获取元素,那么你必须这样写

nodeobject.getElementsByTagName("Elementobject");

因为没有标签,所以这给了你

NUll POINTER

FOR loop如果属性存在,则必须选择属性。

于 2013-10-05T06:24:50.967 回答
1

data1 不是元素,而是属性。因此,当使用 getElementByTagName() 方法然后在其上调用方法 item() 时,不检查第一个是否返回任何内容会导致 NullPointerException。

尝试获取属性。例如,请在此处查看: http ://www.drdobbs.com/jvm/easy-dom-parsing-in-java/231002580

于 2013-01-18T10:47:06.100 回答