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