正如文档
https://docs.oracle.com/javase/7/docs/api/org/w3c/dom/Node.html#getLocalName()所述:
for nodes created with a DOM Level 1 method, […] this is always null
因此,请确保使用名称空间感知DocumentBuilderFactory和setNamespaceAware(true),这样DOM就支持名称空间感知DOM Level 2/3,并且getLocalName()将具有非null值.
一个简单的测试程序
String xml = "";
DocumentBuilderFactory db = DocumentBuilderFactory.newInstance();
Document dom1 = db.newDocumentBuilder().parse(new InputSource(new StringReader(xml)));
System.out.println(dom1.getDocumentElement().getLocalName() == null);
db.setNamespaceAware(true);
Document dom2 = db.newDocumentBuilder().parse(new InputSource(new StringReader(xml)));
System.out.println(dom2.getDocumentElement().getLocalName() == null);
输出
true
false
所以(至少)你的本地名称问题是由于使用DOM Level 1而不是名称空间感知文档(builder factory)引起的.