gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 11:36:46 24 4
gpt4 key购买 nike

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

<ns2:getNewTokenResponse xmlns:ns2="http://abc.examples.com/">

这部分已解析和子节点,以便我可以创建一个类,该类将“nodeName”作为属性,值为“getNewTokenResponse”。 + session key

<env:Envelope xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'>
<env:Header>
</env:Header>
<env:Body>
<ns2:getNewTokenResponse xmlns:ns2="http://abc.examples.com/">
<return>
{{session.key}}
</return>
</ns2:getNewTokenResponse>
</env:Body>
</env:Envelope>

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

最佳答案

要在 Java 中使用 namespace 执行 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);在你的 DocumentBuilderFactory在创建 DocumentBuilder 之前解析您的文档。

关于java - 在 JAVA 中使用 XPath 解析具有不同命名空间的 xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14392200/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com