调用salesforce API时,我得到一个如下对象:
<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>xxxx@gmail.com</userEmail>
<userFullName>UserSF SalesForce</userFullName>
<userId>00590000002mYukAAE</userId>
<userLanguage>en_US</userLanguage>
<userLocale>en_US</userLocale>
<userName>xxxx@gmail.com</userName>
<userTimeZone>America/Los_Angeles</userTimeZone>
<userType>Standard</userType>
<userUiSkin>Theme3</userUiSkin>
</result>
</getUserInfoResponse>
我需要提取&#39; userEmail&#39;使用xpath。
有人可以告诉我使用的确切xpath吗?
使用http://www.freeformatter.com/xpath-tester.html进行试用时,会出现如下错误。
XPath查询的默认(无前缀)命名空间URI始终是&#39;&#39;并且无法将其重新定义为“partner.soap.sforce.com&#39;。
答案 0 :(得分: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也不喜欢它们。