在JAVA中使用XPath解析具有不同命名空间的xml

我正在做这个小项目,我的任务是读取一个xml文件并解析它,以便它可以存储在一个类中。 这是xml示例。 它是用SOAP编写的,我想做的就是得到

 

这部分解析了子节点,以便我可以创建一个具有’nodeName’作为属性的类,其值为’getNewTokenResponse’。 +会话密钥

       {{session.key}}     

但我真正的问题是,我发现很多很好的示例代码,名称空间没有前缀,xml文件的结构可能会有所不同。 所以在这里我很困惑地完成任务。 我会感激任何建议。 干杯:d

要使用Java中的命名空间执行XPath查询,我相信您需要执行以下操作:

 XPath xpath = XPathFactory.newInstance().newXPath(); xpath.setNamespaceContext(new NamespaceContext() { @Override public String getNamespaceURI(String prefix) { switch (prefix) { case "env": return "http://schemas.xmlsoap.org/soap/envelope/"; case "ns2": return "http://abc.examples.com/"; } return XMLConstants.NULL_NS_URI; } @Override public String getPrefix(String namespaceURI) { throw new UnsupportedOperationException("Not supported yet."); } @Override public Iterator getPrefixes(String namespaceURI) { throw new UnsupportedOperationException("Not supported yet."); } }); Node getNewTokenResp = (Node) xpath.evaluate("/env:Envelope/env:Body/ns2:getNewTokenResponse", document, XPathConstants.NODE); 

您还需要调用.setNamespaceAware(true); 在创建DocumentBuilder以解析DocumentBuilderFactory之前,在DocumentBuilder上。