如何在 xpath 中定义默认的 salesforce 命名空间

How to define the default salesforce namespace in xpath

当调用销售人员 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>

我需要使用 xpath 提取 'userEmail'。

有人可以告诉我要使用的确切 xpath 吗?

尝试使用 http://www.freeformatter.com/xpath-tester.html 时出现如下错误。

XPath 查询的默认(无前缀)命名空间 URI 始终为 '',不能将其重新定义为 'urn:partner.soap.sforce.com'.

请注意您链接到的页面上的粗体警告:

The XPath tester fully supports XML namespaces, but the declarations MUST be explicit and MUST be on the root XML element. See the XPath Examples section for details.

换句话说,它们 完全支持XML 名称空间...仅支持在最外层元素上声明的名称空间。这是一个懒惰的 hack,因为这意味着有很多 XML 无法使用他们的工具,例如您的示例。幸运的是,您的示例可以轻松地手动调整以适应它们的限制,但其他示例则不能(例如,当不同的名称空间映射到文档不同部分的相同前缀时)。

更糟糕的是,他们没有预先告诉您的是他们根本不支持声明默认命名空间,即使是在最外层的元素上也是如此。这使得 XML 个更大的、常见的 class 个文档无法使用他们的工具。

解决方法:换一个更好的工具,比如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 不会喜欢它们。