Xerces JAR 导致异常
Xerces JAR causing exception
Xerces jars 遇到一个奇怪的问题。我将我的代码迁移到另一个工作区。有一部分代码使用了 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] 的值,我检查了这个站点,看到很多人面临同样的问题。但是具体的回答很少。
问题出在 XML 命名空间。
我必须设置:
domFactory.setNamespaceAware(true);
然后使用以下方法获取节点:
NodeList nodes = document.getElementsByTagName("ml:student");
有点偶然发现了解决方案。相同的代码以前工作,没有名称空间。
Xerces jars 遇到一个奇怪的问题。我将我的代码迁移到另一个工作区。有一部分代码使用了 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] 的值,我检查了这个站点,看到很多人面临同样的问题。但是具体的回答很少。
问题出在 XML 命名空间。
我必须设置:
domFactory.setNamespaceAware(true);
然后使用以下方法获取节点:
NodeList nodes = document.getElementsByTagName("ml:student");
有点偶然发现了解决方案。相同的代码以前工作,没有名称空间。