2017-02-12 65 views
0

我試着使用XML標籤提取數據庫中的數據,但我保留收到​​此錯誤提取由標籤名從XML對象數據

'java.lang.String org.w3c.dom.Node.getNodeValue()' on a null object reference 

不知道爲什麼它說的標籤爲空時,我有一個日誌在我嘗試提取數據之前的字符串,它看起來應該我相信。

<?xml version="1.0" ?> 
    <database> 
    <account> 
    <id>1</id> 
    <fname>john</fname> 
    <lname>smith</lname> 
    <status>1</status> 
    </account> 
</database> 

也就是從我試圖從數據中提取,並在此字符串輸出是我使用的提取它的代碼。

 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();; 
     DocumentBuilder db = dbf.newDocumentBuilder(); 
     Document dom = db.parse (new ByteArrayInputStream(s.getBytes())); 
     Element docEle = dom.getDocumentElement(); 

     NodeList nl = docEle.getElementsByTagName("account"); 

     Element entry = (Element)nl.item(0); 
     Element id = (Element)entry.getElementsByTagName("id").item(0); 
     Element fname= (Element)entry.getElementsByTagName("fname").item(0); 
     Element lname = (Element)entry.getElementsByTagName("lname").item(0); 
     Element status= (Element)entry.getElementsByTagName("status").item(0); 

     user_id = id.getFirstChild().getNodeValue(); 
     user_fname = fname.getFirstChild().getNodeValue(); 
     user_lname = lname.getFirstChild().getNodeValue(); 
     user_status = status.getFirstChild().getNodeValue(); 

應用崩潰時,它試圖對得到的第一個元素節點值,任何幫助表示讚賞,並提前

感謝
+0

上面的代碼是讀出的標籤名稱很可能是錯誤的。如果默認的'file.encoding'不是UTF-8(在Windows上是Cp1252),'s.getBytes()'會返回一個Windows-1252數據數組,但是由於XML沒有聲明編碼,它會默認爲UTF-8。代碼點127以上的任何字符將被亂碼,否則解析將失敗。切勿調用不帶'Charset'的getBytes()重載。使用's.getBytes(StandardCharsets.UTF_8)'。 –

+0

嗨,我添加了你建議的代碼,但應用程序仍然崩潰,我連接到基於Linux的服務器,如果這有所作爲。 –

+1

哪一個出現'null'?可能的重複[什麼是NullPointerException,以及如何解決它?](http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it) –

回答

0

已啓動<帳戶>標籤,但並沒有結束。更改< /用戶>到< /帳戶>

+0

我沒有糾正這個錯誤,但它沒有區別 –

+1

@AndrewDean你的代碼甚至沒有編譯。沒有'radius'和'loc'變量。如果您需要真正的幫助,請發佈真實的代碼。 –

+0

@DavidConrad我的歉意我改變了一些變量名作爲它的一部分,但是在帖子中糾正了它們。 –

0

管理弄清楚,這將有助於任何人都有類似的問題,我希望。

,以便能夠從一個XML字符串我做了以下(s是XML字符串變量)

  InputSource is = new InputSource(); 
      is.setCharacterStream(new StringReader(s)); 

      DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();; 
      DocumentBuilder db = dbf.newDocumentBuilder(); 
      Document dom = db.parse(is); 
      Element docEle = dom.getDocumentElement(); 

      NodeList nl = docEle.getChildNodes(); 

      if (nl != null) { 
       int length = nl.getLength(); 
       for (int i = 0; i < length; i++) { 
        if (nl.item(i).getNodeType() == Node.ELEMENT_NODE) { 
         Element el = (Element) nl.item(i); 
         if (el.getNodeName().contains("account")) { 
          user_id = el.getElementsByTagName("id").item(0).getTextContent(); 
          user_fname = el.getElementsByTagName("fname").item(0).getTextContent(); 
          user_lname = el.getElementsByTagName("lname").item(0).getTextContent(); 
          user_status = el.getElementsByTagName("status").item(0).getTextContent(); 
         } 
        } 
       } 
      } 

的用戶_變量具有XML標籤值