使用Dom Parser在Java中解析不同的结构化XML?

时间:2013-01-18 10:17:22

标签: java xml dom xml-parsing

我正在尝试使用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();

2 个答案:

答案 0 :(得分:2)

嗯,您正在尝试获取Element,并且您正在获取属性。所以我建议的是,尝试清除Basic基础知识,如果你想获取元素,那么你必须这样写

nodeobject.getElementsByTagName("Elementobject");

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

NUll POINTER

对于属性,如果属性存在,则必须转到FOR loop

答案 1 :(得分:1)

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

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