我是salesforce的新手。精通php,但我没有做过任何xml解析。我有这个文件,我可以使用。它是在salesforce对象更改时创建的:
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<notifications xmlns="http://soap.sforce.com/2005/09/outbound">
<OrganizationId>00D30000000opwSEAQ</OrganizationId>
<ActionId>04k30000000L6QPAA0</ActionId>
<SessionId xsi:nil="true"/>
<EnterpriseUrl>https://na1-api.salesforce.com/services/Soap/c/22.0/00D30000000opwS</EnterpriseUrl>
<PartnerUrl>https://na1-api.salesforce.com/services/Soap/u/22.0/00D30000000opwS</PartnerUrl>
<Notification>
<Id>04l3000000JbKClAAN</Id>
<sObject xsi:type="sf:Account" xmlns:sf="urn:sobject.enterprise.soap.sforce.com">
<sf:Id>0013000000ooziWAAQ</sf:Id>
<sf:BillingCity>New York</sf:BillingCity>
<sf:BillingCountry>US</sf:BillingCountry>
<sf:BillingPostalCode>10000</sf:BillingPostalCode>
<sf:BillingState>New York</sf:BillingState>
<sf:BillingStreet>302 E xxx St Apt C</sf:BillingStreet>
<sf:FN__Mapping_Status__c>Not Located Yet</sf:FN__Mapping_Status__c>
<sf:IsDeleted>false</sf:IsDeleted>
<sf:Member_Status__c>Active</sf:Member_Status__c>
<sf:Name>Joel Test</sf:Name>
</sObject>
</Notification>
</notifications>
</soapenv:Body>
</soapenv:Envelope>
我需要解析它,以便我可以获取sf命名空间中的值并更新数据库。我可以使用SimpleXML来读取命名空间中的东西,但是我无法读取命名空间值。有人能指出我的示例代码或教程如何做到这一点?
答案 0 :(得分:0)
PHP的SimpleXML不适用于读取命名空间信息。见这 - http://www.w3schools.com/php/php_xml_simplexml.asp。而是尝试这样的事情http://www.php.net/manual/en/function.xml-parser-create-ns.php
答案 1 :(得分:0)
看起来这是来自Salesforce中的出站消息传递功能的SOAP消息。不要将其仅视为XML,而是尝试将本地PHP SoapServer与Salesforce中提供的WSDL一起使用,因为它旨在处理这样的SOAP消息。您可以在Setup |中获取WSDL创建|工作流程&amp;批准|出站邮件| |端点WSDL。您可能还想查看Salesforce PHP Client,它使用相应的PHP SoapClient并具有处理sf:namespace和转换为SObject对象的实用程序。重新连接工具包以充当服务器而不是客户端应该不会太难,因此您可以处理出站消息。
答案 2 :(得分:0)
PHP的SimpleXML可能适用于该案例。只需要使用children()并使用正确的语法。
因此,要在Salesforce Outbound Message中读取字段值BillingCity,您可以使用以下代码:
$rcXML->children('http://schemas.xmlsoap.org/soap/envelope/')->Body->children('http://soap.sforce.com/2005/09/outbound')->notifications->Notification->sObject->children('urn:sobject.enterprise.soap.sforce.com')->BillingCity
为了帮助您了解它是如何工作的,我写了一篇包含相同代码和xml的帖子,这些帖子应该更容易理解。
http://amigotechnotes.wordpress.com/2013/11/16/parse-xml-with-namespace-by-simplexml-in-php/
一旦您阅读了归档值,您就可以使用PHP将其存储到其他数据库或文本文件中。