在php中处理XML对象

时间:2014-06-21 13:28:51

标签: php xml

这是我向服务器请求的XML。它是一个XML,包含有关当前用户的一些信息。我想检查 TotalNumberOfResults 是否有多个响应。如果那个比我想要迭代的那个大并找到 ** Results-> ResultItem-> ResultType = Person **

每个结果都在 ResultItem 中显示。如果匹配,我想选择该ResultItem的其余信息( FirstName,LastName,Zip等)。

这是我从请求中获取的XML:

<SearchResponse xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://secret.link”>
<ExtensionData/>
<Results>
<ResultItem>
<ExtensionData/>
<Addresses>
<Address_Search>
<ExtensionData/>
<AddressType>Visiting</AddressType>
<City>Oslo</City>
<Country>Norway</Country>
<FormattedAddress>The whole adress</FormattedAddress>
<HouseNumber>13</HouseNumber>
<MunicipalityCode>1234</MunicipalityCode>
<Street>Streetadress</Street>
<StreetId>12313</StreetId>
<Zip>1234</Zip>
</Address_Search>
</Addresses>
<BirthDate xsi:nil="true"/>
<Collection>Contacts</Collection>
<ContactPoints>
<ContactPoint_Search>
<ExtensionData/>
<Address>2312313</Address>
<ContactPointType>Mobile</ContactPointType>
<IsMain>true</IsMain>
</ContactPoint_Search>
<ContactPoint_Search>
<ExtensionData/>
<Address>mail@mail.com</Address>
<ContactPointType>Email</ContactPointType>
<IsMain>false</IsMain>
</ContactPoint_Search>
<ContactPoint_Search>
<ExtensionData/>
<Address>123123</Address>
<ContactPointType>Landline</ContactPointType>
<IsMain>false</IsMain>
</ContactPoint_Search>
<ContactPoint_Search>
<ExtensionData/>
<Address/>
<ContactPointType>Mobile</ContactPointType>
<IsMain>false</IsMain>
</ContactPoint_Search>
</ContactPoints>
<FirstName>Name</FirstName>
<ItemId>123123</ItemId>
<LastName>Name’sen</LastName>
<ResultType>Person</ResultType>
</ResultItem>
</Results>
<TotalNumberOfResults>1</TotalNumberOfResults>
</SearchResponse>

这是我对此请求的一些server-php:

 $xml = simplexml_load_file($the_url_to_the_request);
            $result = [];

            if ($xml->TotalNumberOfResults > 1) {
                foreach ($xml as $key => $value) {
                    if ($value->Results->ResultItem->ResultType == "Person") {
                        //var_dump("It's a match");
                        //var_dump($value->Results->ResultItem->ResultType);exit;
                        $result = array("Name" => $value->Results->ResultItem->FirstName . "", "Surname" => $value->Results->ResultItem->LastName . "",  "ZIP" => $value->Results->ResultItem->Addresses->Address_Search->Zip . "", "By" => $value->Results->ResultItem->Addresses->Address_Search->City . "", "City" => $value->Results->ResultItem->Addresses->Address_Search->City . "");
                        echo($_GET['callback'] . "(" . json_encode($result) . ");");
                    }
                }

            }else{
                $result = array("Name" => $xml->Results->ResultItem->FirstName . "", "Surname" => $xml->Results->ResultItem->LastName . "",  "ZIP" => $xml->Results->ResultItem->Addresses->Address_Search->Zip . "", "City" => $xml->Results->ResultItem->Addresses->Address_Search->City . "", "By" => $xml->Results->ResultItem->Addresses->Address_Search->City . "");                
                echo($_GET['callback'] . "(" . json_encode($result) . ");");
            }

问题:只有一个结果可以正常运行,但多个结果都不会发生。

1 个答案:

答案 0 :(得分:1)

您必须使用foreach循环更改迭代的元素集合。它应该是$xml->Results,而不是$xml

$xml = simplexml_load_file($the_url_to_the_request);
$result = [];
if ($xml->TotalNumberOfResults > 1) {
    foreach ($xml->Results as $key => $value) {
        if ($value->ResultItem->ResultType == "Person") {
            //var_dump("It's a match");
            //var_dump($value->ResultItem->ResultType);exit;
            $result = array("Name" => $value->ResultItem->FirstName . "", "Surname" => $value->ResultItem->LastName . "",  "ZIP" => $value->ResultItem->Addresses->Address_Search->Zip . "", "By" => $value->ResultItem->Addresses->Address_Search->City . "", "City" => $value->ResultItem->Addresses->Address_Search->City . "");
            echo($_GET['callback'] . "(" . json_encode($result) . ");");
        }
    }
}
else {
    $result = array("Name" => $xml->Results->ResultItem->FirstName . "", "Surname" => $xml->Results->ResultItem->LastName . "",  "ZIP" => $xml->Results->ResultItem->Addresses->Address_Search->Zip . "", "City" => $xml->Results->ResultItem->Addresses->Address_Search->City . "", "By" => $xml->Results->ResultItem->Addresses->Address_Search->City . "");
    echo($_GET['callback'] . "(" . json_encode($result) . ");");
}