2017-03-19 6 views
0

でのSalesforceの複数の名前空間を提供するためにどのように私はこれを下回る私はセールスフォースからもらったようなレスポンスを持っています。私はxpathを使用してProfileIdを取得する必要があります。XPathの

<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>[email protected]</sf:Username> 
     <sf:ProfileId>00e90000001aVwiAAE</sf:ProfileId> 
     <sf:Name>user</sf:Name> 
     <sf:LastName>test</sf:LastName> 
     <sf:Email>[email protected]</sf:Email> 
     </records> 
     <size>1</size> 
    </result> 
</queryResponse> 

私はオンラインのxpathジェネレータを使用しました。それは私に以下のxpathを与えました。しかし、それは間違っているようです。

/queryResponse[@xmlns="urn:partner.soap.sforce.com"]/result[@xsi:type="QueryResult"]/records[@xsi:type="sf:sObject"]/sf:ProfileId/text() 
+0

'/ queryResponse/result/records/sf:ProfileId/text()'または '/queryResponse[namespace-uri()/select:partner.soap.sforce.com"]/result[@xsi:type = "QueryResultでは"] /レコードの[@xsi:タイプ= "SF:のsObject"]/SF:プロファイルID /テキスト() ' – Andersson

+0

@UshaniはどのようにしてそのXPathを実行したのですか?ここでXPathプロセッサとは何ですか? – har07

+0

@ har07 http://xmltoolbox.appspot.com/xpath_generator.htmlを使用しました。 。私はxpathに名前空間自体を提供する方法を知る必要がありますか? – Ushani

答えて

1

あなたが使用するXPathジェネレータデフォルトの名前空間適切に処理しませんでしたようです。通常、プレフィックスを宣言する必要があります(この手順の詳細はXPathプロセッサによって異なります)。たとえば、dは、デフォルトの名前空間URI「urn:partner.soap.sforce.com」を参照しています。そして、その名前空間内の要素を参照するために、その接頭辞を使用します(読みやすいように改行):

/d:queryResponse 
/d:result[@xsi:type="QueryResult"] 
/d:records[@xsi:type="sf:sObject"] 
/sf:ProfileId 
/text() 

demo

以前のXPathと同様に機能し、純粋なXPathを作成することが可能であるが、それは複雑すぎるでしょう。あなたにそれの味を与えるために、次はの一部とほぼ同等である以前のXPath(ダウン/d:recordsから開始):

//*[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() 

他の多くの可能なXPath式は、XML構造からProfileIdを取得することがありますXMLドキュメント内の任意の場所:「プロファイルID SF」を次のように適切になり、あなたのXPathプロセッサを使用して名前空間接頭辞を宣言する方法を知らなくても、最も簡単なの一つは、タグ名が等しい

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

上記の要素を返します。