我正在进行服务调用以从salesforce获取会话ID,我正在尝试从serverurl节点中提取主机名。
请求(基本上来自Saleforce的回复)
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns="urn:enterprise.soap.sforce.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<loginResponse>
<result>
<metadataServerUrl>https://hostname.my.salesforce.com/services/Soap/m/34.0/00Dn00000008evG</metadataServerUrl>
<passwordExpired>false</passwordExpired>
<sandbox>true</sandbox>
<serverUrl>https://hostname.my.salesforce.com/services/Soap/c/34.0/00Dn00000008evG/0DFL000000001Vj</serverUrl>
<sessionId>00Dn00000008</sessionId>
<userId>test</userId>
</result>
</loginResponse>
</soapenv:Body>
</soapenv:Envelope>
我正在尝试从hostname.my.salesforce.com
获取此值<serverUrl>https://hostname.my.salesforce.com/services/Soap/c/34.0/00Dn00000008evG/0DFL000000001Vj</serverUrl>
。
我可以使用此
获取值<xsl:variable name="serverUrl" select="substring-before(/*[local-name()='Envelope']/*[local-name()='Body']/*[local-name()='loginResponse']/*[local-name()='result']/*[local-name()='serverUrl'],'/services/Soap/c/34.0/00DS0000003Kwbv/0DFL000000001Vj')"/>
问题是URI部分不断变化而不是匹配/services/Soap/c/34.0/00DS0000003Kwbv/0DFL000000001Vj
有不同的方法来获取价值。
根据我所看到的情况,该URI始终首先/services/Soap/c/34.0
以及之后的部分更改。
有人可以提供建议吗?
答案 0 :(得分:1)
仅获取主机名的方法略有不同(不带前导https://
的方法是:
select="substring-before( substring-after($servernode, 'https://'), '/')"
其中servernode类似于
<xsl:variable name="servernode"
select="*[local-name()='Envelope']/*[local-name()='Body']/*[local-name()='loginResponse']/*[local-name()='result']/*[local-name()='serverUrl']"/>
顺便提一下,我建议在xslt中使用适当的名字声明来避免使用这个本地名称。