gpt4 book ai didi

java - 从 SOAP header 中提取术语

转载 作者:数据小太阳 更新时间:2023-10-29 01:55:31 27 4
gpt4 key购买 nike

我想从 SOAP header 中提取一个名为 ServiceGroupID 的元素,它指定事务的 session 。我需要这个以便我可以使用 SOAP session 将请求定向到同一台服务器。我的 XML 如下:

<?xml version="1.0" encoding="http://schemas.xmlsoap.org/soap/envelope/" standalone="no"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
<wsa:ReplyTo>
<wsa:Address>http://www.w3.org/2005/08/addressing/none</wsa:Address>
<wsa:ReferenceParameters>
<axis2:ServiceGroupId xmlns:axis2="http://ws.apache.org/namespaces/axis2">urn:uuid:99A029EBBC70DBEB221347349722532</axis2:ServiceGroupId>
</wsa:ReferenceParameters>
</wsa:ReplyTo>
<wsa:MessageID>urn:uuid:99A029EBBC70DBEB221347349722564</wsa:MessageID>
<wsa:Action>Perform some action</wsa:Action>
<wsa:RelatesTo>urn:uuid:63AD67826AA44DAE8C1347349721356</wsa:RelatesTo>
</soapenv:Header>

我想知道如何使用 Xpath 从上述 XML 中提取 Session GroupId。

最佳答案

您没有指定技术,因此假设您没有设置 .NET NameSpace 管理器或类似的等效项,您可以使用与 namespace 无关的 Xpath,如下所示:

/*[local-name()='Envelope']/*[local-name()='Header']
/*[local-name()='ReplyTo']/*[local-name()='ReferenceParameters']
/*[local-name()='ServiceGroupId']/text()

编辑 为 Java 更新

没有命名空间别名

XPathFactory factory = XPathFactory.newInstance();
XPath xpath = factory.newXPath();
XPathExpression expression = xpath.compile("/*[local-name()='Envelope']/*[local-name()='Header']/*[local-name()='ReplyTo']/*[local-name()='ReferenceParameters']/*[local-name()='ServiceGroupId']/text()");
System.out.println(expression.evaluate(myXml));

NamespaceContext

NamespaceContext context = new NamespaceContextMap(
"soapenv", "http://schemas.xmlsoap.org/soap/envelope/",
"wsa", "http://www.w3.org/2005/08/addressing",
"axis2", "http://ws.apache.org/namespaces/axis2");
XPathFactory factory = XPathFactory.newInstance();
XPath xpath = factory.newXPath();
xpath.setNamespaceContext(context);
XPathExpression expression = xpath.compile("/soapenv:Envelope/soapenv:Header/wsa:ReplyTo/wsa:ReferenceParameters/axis2:Serv‌​iceGroupId/text()");
System.out.println(expression.evaluate(myXml));

local-name() 给出与其命名空间无关的元素的标签名称。此外,您上面的 xml 文档中的 encoding 看起来不正确。

编辑

假设 urn:uuid: 是一个常量,下面的 XPath 将去掉结果的前 9 个字符(与上述任一 XPath 一起使用)。如果 urn:uuid 不是常数,那么您需要标记化/拆分等,which is beyond my skills .

substring(string(/*[local-name()='Envelope']/*[local-name()='Header']
/*[local-name()='ReplyTo']/*[local-name()='ReferenceParameters']
/*[local-name()='ServiceGroupId']/text()), 10)

关于java - 从 SOAP header 中提取术语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12366575/

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