2015-08-11 5 views
1

При вызове Salesforce API, я получаю объект, как показано ниже:Как определить пространство имен по умолчанию Salesforce в XPath

<getUserInfoResponse xmlns="urn:partner.soap.sforce.com"> 
    <result> 
     <accessibilityMode>false</accessibilityMode> 
     <currencySymbol>$</currencySymbol> 
     <orgAttachmentFileSizeLimit>5242880</orgAttachmentFileSizeLimit> 
     <orgDefaultCurrencyIsoCode>USD</orgDefaultCurrencyIsoCode> 
     <orgDisallowHtmlAttachments>false</orgDisallowHtmlAttachments> 
     <orgHasPersonAccounts>false</orgHasPersonAccounts> 
     <organizationId>xxxxx</organizationId> 
     <organizationMultiCurrency>false</organizationMultiCurrency> 
     <organizationName>WSO2</organizationName> 
     <profileId>00e90000001tKNwAAM</profileId> 
     <roleId xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/> 
     <sessionSecondsValid>7200</sessionSecondsValid> 
     <userDefaultCurrencyIsoCode xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/> 
     <userEmail>[email protected]</userEmail> 
     <userFullName>UserSF SalesForce</userFullName> 
     <userId>00590000002mYukAAE</userId> 
     <userLanguage>en_US</userLanguage> 
     <userLocale>en_US</userLocale> 
     <userName>[email protected]</userName> 
     <userTimeZone>America/Los_Angeles</userTimeZone> 
     <userType>Standard</userType> 
     <userUiSkin>Theme3</userUiSkin> 
    </result> 
</getUserInfoResponse> 

Мне нужно извлечь «USEREMAIL» с помощью XPath.

Может кто-нибудь, пожалуйста, скажите мне, какой именно xpath будет использоваться?

Приведенная ниже ошибка дает ошибку при использовании функции http://www.freeformatter.com/xpath-tester.html.

По умолчанию (без префикса) URI пространства имен для запросов XPath всегда '', и его нельзя переопределить на 'urn: partner.soap.sforce.com'.

ответ

3

Обратите внимание на предупреждение жирным шрифтом, на странице вы связаны с:

XPath тестер полностью поддерживает пространства имен XML, но заявления должны быть явными и должны быть корневого элемента XML. Подробную информацию см. В разделе примеров XPath .

Другими словами, они сделать не полностью поддержки пространств имен XML ... только те, которые объявлены на наружном элементе. Это ленивый взлом, потому что это означает, что есть много XML, которые не будут работать с их инструментом, например, с вашим примером. Ваш пример, к счастью, может быть вручную изменен, чтобы соответствовать их ограничениям без особых проблем, но другие не могут (например, когда разные пространства имен сопоставляются с одним и тем же префиксом в разных частях документа).

Хуже того, что они не говорят вам, что они не поддерживают объявление пространства имен по умолчанию вообще, даже на самом внешнем элементе. Это делает более крупным, общий класс XML-документов непригодным для использования с их инструментом.

Решение: переключитесь на лучший инструмент, например XPath Tester.

P.S. (Почему?) Если вы действительно хотите использовать FreeFormatter, вы могли бы объявить префикс пространства имен sforce:

xmlns:sf="urn:partner.soap.sforce.com" 

, а затем добавить префикс к sf пространства имен к каждому имени элемента в вашем XML и в этом выражении XPath , Вы также можете избавиться от деклараций пространств имен в

xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 

, так как они не используются, и FreeFormatter не понравится.

Смежные вопросы