Xerces JAR导致异常

时间:2016-10-07 18:25:09

标签: java dom sax xerces

面对Xerces罐子的一个奇怪问题。我将代码迁移到了不同​​的工作区。有一部分代码使用了org.w3c.dom XML类。现在我迁移了代码,相同的代码抛出了异常。

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]的值时,我检查了这个网站,看到很多人面临同样的问题。但是很少有具体的答案。

1 个答案:

答案 0 :(得分:0)

问题在于XML命名空间。

我必须设置:

domFactory.setNamespaceAware(true);

然后使用:

获取节点
NodeList nodes = document.getElementsByTagName("ml:student");

偶然发现了解决方案。以前使用相同的代码,没有命名空间。