我没有看到您将解析器设置为可识别名称空间,所以这很可能是这里缺少的东西。
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(inputStream);
然后在节点上调用getLocalName()
将为您提供不带任何前缀的名称。
但是,如果这对您来说还不够,并且您真的想完全摆脱名称空间,您可以使用 XML 转换来创建一个没有名称空间的新 DOM 树:
Transformer trans = TransformerFactory.newInstance().newTransformer(
new StreamSource(new StringReader("<?xml version='1.0'?>"
+"<stylesheet xmlns='http://www.w3.org/1999/XSL/Transform' version='1.0'>"
+ "<template match='*' priority='1'>"
+ "<element name='{local-name()}'><apply-templates select='@*|node()'/></element>"
+ "</template>"
+ "<template match='@*' priority='0'>"
+ "<attribute name='{local-name()}'><value-of select='.'/></attribute>"
+ "</template>"
+ "<template match='node()' priority='-1'>"
+ "<copy><apply-templates select='@*|node()'/></copy>"
+ "</template>"
+"</stylesheet>")));
DOMResult result=new DOMResult();
trans.transform(new DOMSource(document), result);
document=(Document)result.getNode();