2014-02-17 221 views
0

我正在做一个SOAP调用并获取以XML格式返回的数据。返回的XML有一个标记,我不知道该如何处理。我只需要全部<web_get_debiteuren>php从XML文件获取数据

我想过使用php SimpleXMLElement(http://www.php.net/manual/en/simplexml.examples-basic.php)。但我不能做这样的事:

$xml = new SimpleXMLElement($result); 
echo $xml->soap; 

我如何将能够通过所有结果瓦兹XML文件的<web_get_debiteuren>一部分?

参见下面的XML:

<?xml version="1.0" encoding="windows-1250"?> 
<soap:envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <soap:body> 
    <getdatawithoptionsresponse xmlns="urn:Afas.Profit.Services"> 
     <getdatawithoptionsresult> 
     <AfasGetConnector> 
      <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
      <xs:element name="AfasGetConnector"> 
       <xs:complexType> 
       <xs:choice maxOccurs="unbounded"> 
        <xs:element name="web_get_debiteuren"> 
        <xs:complexType> 
         <xs:sequence> 
         <xs:element name="Nummer_debiteur" type="xs:string" minOccurs="0"/> 
         <xs:element name="Naam_debiteur" type="xs:string" minOccurs="0"/> 
         <xs:element name="E-mail_werk" type="xs:string" minOccurs="0"/> 
         <xs:element name="Voornaam" type="xs:string" minOccurs="0"/> 
         <xs:element name="Achternaam" type="xs:string" minOccurs="0"/> 
         </xs:sequence> 
        </xs:complexType> 
        </xs:element> 
       </xs:choice> 
       </xs:complexType> 
      </xs:element> 
      </xs:schema> 
      <web_get_debiteuren> 
      <Nummer_debiteur>10000</Nummer_debiteur> 
      <Naam_debiteur>Test</Naam_debiteur> 
      <Voornaam>Hans</Voornaam> 
      <Achternaam>Klok</Achternaam> 
      </web_get_debiteuren> 
      <web_get_debiteuren> 
      <Nummer_debiteur>11000</Nummer_debiteur> 
      <Naam_debiteur>Sven</Naam_debiteur> 
      <E-mail_werk>[email protected]</E-mail_werk> 
      <Voornaam>Sven</Voornaam> 
      <Achternaam>Kramer</Achternaam> 
      </web_get_debiteuren> 
      <web_get_debiteuren> 
      <Nummer_debiteur>11001</Nummer_debiteur> 
      <Naam_debiteur>Ireen</Naam_debiteur> 
      <E-mail_werk>[email protected]</E-mail_werk> 
      <Voornaam>Ireen</Voornaam> 
      <Achternaam>Wust</Achternaam> 
      </web_get_debiteuren> 
     </AfasGetConnector> 
     </getdatawithoptionsresult> 
    </getdatawithoptionsresponse> 
    </soap:body> 
</soap:envelope> 
+0

如果您使用的是soap,返回应该是对象/数组形式。你如何获得原始的XML?通过__getLastResponse()之类的调试功能之一? –

+0

__getLastResponse()为空。 SOAP服务需要NTLM身份验证,因此结果是由cURL提取的。我发布的XML是从SOAP调用返回的代码。 – Timo002

回答

0

您可以使用xpath。样品中可能出现的问题:

Using xpath on a PHP SimpleXML object, SOAP + namespaces (not working..) parse an XML with SimpleXML which has multiple namespaces

但我认为,你应该如果有可能使用SoapClient的..

+0

SoapClient不会返回任何东西。 SOAP服务需要NTLM身份验证,因此结果是由cURL提取的。我发布的XML是从SOAP调用返回的代码。很难理解xpath,但看着它! – Timo002

+0

你可以试试这个解决方案 - http://www.php.net/manual/en/soapclient.soapclient.php#97029 – Nostalgie

+0

我用这个类,http://tcsoftware.net/blog/2011/08/php- soapclient-authentication /,我认为也是这样! – Timo002

0

由于怀旧的使用XPath的技巧中,我得到它的工作。请参见下面的代码:

$response = simplexml_load_string($result ,NULL, NULL, "http://schemas.xmlsoap.org/soap/envelope/"); 

$response->registerXPathNamespace("site", "urn:Afas.Profit.Services"); 
$_res = $response->xpath('//site:AfasGetConnector'); 
#$_res = $_res->AfasGetConnector; 

foreach($_res[0]->web_get_debiteuren AS $deb){ 
    echo "Number: ".$deb->Nummer_debiteur."<br>"; 
} 

这将输出:

Number: 10000 
Number: 11000 
Number: 11001 
Number: 11002 
Number: 11003 
Number: 11004 

感谢名单!