Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在php中处理XML对象_Php_Xml - Fatal编程技术网

在php中处理XML对象

在php中处理XML对象,php,xml,Php,Xml,这是我向服务器请求时得到的XML。它是一个XML,包含有关当前用户的一些信息。我想检查是否有多个响应具有TotalNumberOfResults。如果这个比一个大,我想迭代并找到**Results->ResultItem->ResultType=Person** 每个结果都在一个结果项中删除。如果匹配,我想选择该结果的其余信息(FirstName、LastName、Zip等) 这是我从请求返回的XML: 问题是:对于一个结果,它运行得很好,但是对于多个结果,什么都不会发生。您必须更改使用fore

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

每个结果都在一个结果项中删除。如果匹配,我想选择该结果的其余信息(FirstName、LastName、Zip等)

这是我从请求返回的XML:


问题是:对于一个结果,它运行得很好,但是对于多个结果,什么都不会发生。

您必须更改使用
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) . ");");
}

您必须更改使用
foreach
循环迭代的元素集合。它应该是
$xml->Results
,而不是
$xml
它工作起来很有魅力,为什么我没看到,谢谢you@simonkaspers1如果这个答案能解决你的问题,你也可以选择“接受”这个答案。我得等几分钟看看代码。如果TotalNumberOfResults大于1,它的行为会不同还是相同?你怎么认为?有多少代码可以在不改变行为的情况下被删除?@hakre我已经更改了代码以首先处理TotalNumberOfResults==1,因为大多数结果都是1。这是为了防止不必要的循环。这一次对你有好处吗?
 $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) . ");");
            }
$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) . ");");
}