Java DOM解析器过滤掉SOAP名称空间前缀?

Hag*_*ski 1 java soap dom

我正在解析一个SOAP,它具有带名称空间前缀的元素:

<ns1:equipmentType>G</ns1:equipmentType>
Run Code Online (Sandbox Code Playgroud)

因此,解析器忠实地创建具有名称空间前缀名称的元素:

ns1:equipmentType
Run Code Online (Sandbox Code Playgroud)

我可以以某种方式告诉解析器过滤掉所有的名称空间前缀吗?所以元素名称将是:

equipmentType
Run Code Online (Sandbox Code Playgroud)

我的代码:

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = documentBuilder.parse(inputStream);
Run Code Online (Sandbox Code Playgroud)

Hol*_*ger 5

我没有看到你将解析器设置为名称空间感知,所以这里很可能是缺少的东西.

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(inputStream);
Run Code Online (Sandbox Code Playgroud)

然后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();
Run Code Online (Sandbox Code Playgroud)