2016-10-07 99 views
-2

面對Xerces罐子的一個奇怪問題。我將我的代碼遷移到不同的工作區中。有一部分代碼使用org.w3c.dom XML類。現在我遷移了代碼,同樣的代碼拋出異常。Xerces JAR導致異常

import javax.xml.parsers.DocumentBuilderFactory; 
import org.w3c.dom.Document; 
import org.w3c.dom.Element; 
import org.w3c.dom.NodeList; 
import org.w3c.dom.Text; 
import org.xml.sax.SAXException; 

但是,當我調試它創建的對象的類型爲:

org.apache.xerces.jaxp.DocumentBuilderFactoryImpl 

不知道在哪裏的Xerces類走進畫面。這導致代碼失敗。

與代碼更新:

DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance(); 
domFactory.setIgnoringComments(true); 
DocumentBuilder builder = domFactory.newDocumentBuilder(); 
InputSource inputSource = new InputSource(); 
inputSource.setCharacterStream(new StringReader(xmlString)); 
Document document = builder.parse(inputSource); 

String grade = "A"; 
NodeList nodes = document.getElementsByTagName("student"); 
if (!routeLimit.equals("")) { 
    Text gradeText = document.createTextNode(grade); 
    Element gradeTag = document.createElement("grade"); 
    gradeTag .appendChild(gradeText); 
    nodes.item(0).appendChild(gradeTag); 
} 

線: nodes.item(0).appendChild(gradeTag);

引發空指針異常。

此外,當我調試代碼,文檔變量[#document:null]的值,我檢查了這個網站,看到很多人面臨同樣的問題。但是很少有具體的答案。

+0

是否有可能知道到目前爲止拋出的異常究竟是什麼? 'org.apache.xerces.jaxp.DocumentBuilderFactoryImpl'實現了'javax.xml.parsers.DocumentBuilderFactory',所以導入不是你的異常的根。 – potame

+0

其空指針異常。 –

+0

檢查舊工作區中的依賴關係。你確定你在那裏使用了相同版本的xerces,或者是其他XML類的實現嗎?從Xerces轉到Saxon之後,我曾遇到類似的問題。 –

回答

0

問題在於XML名稱空間。

我不得不設置:

domFactory.setNamespaceAware(true); 

,然後取使用節點:

NodeList nodes = document.getElementsByTagName("ml:student"); 

的於溶液偶然類。沒有命名空間之前,相同的代碼工作。