Xml 如何在xpath中提供salesforce的多个名称空间

Xml 如何在xpath中提供salesforce的多个名称空间,xml,xpath,salesforce,xml-namespaces,Xml,Xpath,Salesforce,Xml Namespaces,下面是我从salesforce得到的回复。我需要使用xpath来检索ProfileId <queryResponse xmlns="urn:partner.soap.sforce.com" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:sf="urn:sobject.partner.soap.sforc

下面是我从salesforce得到的回复。我需要使用xpath来检索ProfileId

<queryResponse xmlns="urn:partner.soap.sforce.com" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:sf="urn:sobject.partner.soap.sforce.com">
   <result xsi:type="QueryResult">
      <done>true</done>
      <queryLocator xsi:nil="true"/>
      <records xsi:type="sf:sObject">
         <sf:type>User</sf:type>
         <sf:Id xsi:nil="true"/>
         <sf:Username>testuser@test.com</sf:Username>
         <sf:ProfileId>00e90000001aVwiAAE</sf:ProfileId>
         <sf:Name>user</sf:Name>
         <sf:LastName>test</sf:LastName>
         <sf:Email>user@test.com</sf:Email>
      </records>
      <size>1</size>
   </result>
</queryResponse>

您使用的XPath生成器似乎没有正确处理默认名称空间。通常,您需要声明一个前缀(此步骤的详细信息因不同的XPath处理器而异),例如
d
,引用默认的名称空间URI,即“urn:partner.soap.sforce.com”。然后使用该前缀引用该命名空间中的元素(为可读性而包装):

可以创建一个与前面的XPath相同的纯XPath,但它太复杂了。为了让您体验一下,以下内容几乎相当于前面XPath的一部分(从
/d:records
开始):

还有许多其他可能的XPath表达式可以从这种XML结构中获取
ProfileId
,其中最简单的一个表达式,不知道如何使用XPath处理器正确声明名称空间前缀,如下所示:

//*[name()='sf:ProfileId']/text()

上述内容将返回标记名等于XML文档中任意位置的“sf:ProfileId”的元素。

尝试
/queryResponse/result/records/sf:ProfileId/text()
/queryResponse[namespace-uri()=“urn:partner.soap.sforce.com”]/result[@xsi:type=“QueryResult”]/records[@xsi:type=“sf:sObject”]/sf:ProfileId/text()
@Ushani您是如何执行XPath的?这里的XPath处理器是什么?@har07我用过。我需要知道如何在xpath中提供名称空间本身?@Ushani不是我问的生成器,而是在哪里使用生成的xpath?您从salesforce获得了XML,但是您是否也在salesforce中的某个地方执行了XPath?(对不起,我不熟悉salesforce)或者您是否也使用了XPath来执行XPath?
/d:queryResponse
/d:result[@xsi:type="QueryResult"]
/d:records[@xsi:type="sf:sObject"]
/sf:ProfileId
/text()
//*[local-name()='records' and namespace-uri()='urn:partner.soap.sforce.com']
   [@*[
        namespace-uri()='http://www.w3.org/2001/XMLSchema-instance' and 
        local-name()='type' and 
        .="sf:sObject"
    ]]
 /*[local-name()='ProfileId' and namespace-uri()='urn:sobject.partner.soap.sforce.com']
 /text()
//*[name()='sf:ProfileId']/text()