Php 如何从stdClass对象数组获取的xml对象中检索combox中的CountryName列表?

Php 如何从stdClass对象数组获取的xml对象中检索combox中的CountryName列表?,php,arrays,soap,Php,Arrays,Soap,问题:下面给出了SOAP请求的响应,CountryList响应是带有CountryCode和CountryName的XML对象。那么,如何从结果中显示包含CountryName的组合框呢 stdClass Object ( [CountryList] => AFAfghanistanALAlbaniaDZAlgeriaASAmerican amoaADAndorraAOAngolaAIAnguillaAQAntarcticaAGAntigua & BarbudaARArgent

问题:下面给出了SOAP请求的响应,CountryList响应是带有CountryCode和CountryName的XML对象。那么,如何从结果中显示包含CountryName的组合框呢

stdClass Object
(
[CountryList] => 
AFAfghanistanALAlbaniaDZAlgeriaASAmerican  amoaADAndorraAOAngolaAIAnguillaAQAntarcticaAGAntigua & BarbudaARArgentinaAMArmeniaAWArubaAUAustraliaATAustriaAZAzerbaijanBSBahamasBHBahrainBDBangladeshBBBarbadosBYBelarus(Belorussia)BEBelgiumBZBelizeBJBeninBMBermudaBTBhutanBOBoliviaBABosnia and HerzegowinaBWBotswanaBVBouvet IslandsBRBrazilIOBritish Indian Ocean TerritoryVGBritish Virgin IslandsBNBrunei DarussalamBGBulgariaBFBurkina FasoBIBurundiKHCambodiaCMCameroonCACanadaCBCanada BufferCVCape VerdeKYCayman IslandsCFCentral African RepublicTDChadCLChileCNChinaCXChristmas IslandsCCCocos (Keeling) IslandCOColombiaKMComorosCGCongoCDCongo (Rep. Dem.)CKCook IslandsCRCosta RicaHRCroatiaCUCubaCYCyprusCZCzech RepublicDKDenmarkDJDjiboutiDODominican RepublicDMDominicanaTPEast TimorECEcuadorEGEgyptSVEl SalvadorGQEquatorial GuineaEREritreaEEEstoniaETEthiopiaEUEuropean Monetary UnionFKFalkland IslandsFOFaroe IslandsFJFiji IslandsFIFinlandFRFranceGFFrench GuianaPFFrench PolynesiaTFFrench Southern TerritoriesGAGabonGMGambiaGEGeorgiaDEGermanyGHGhanaGIGibralterGRGreeceGLGreenlandGDGrenadaGPGuadeloupeGUGuamGTGuatemalaGNGuineaGWGuinea-BissauGYGuyanaHTHaitiHMHeard & Mcdonald IslandsHNHondurasHKHongkongHUHungaryISIcelandINIndiaIDIndonesiaIRIranIQIraqIEIrelandILIsraelITItalyCIIvory CoastJMJamaicaJPJapanJOJordanKZKazakhstanKEKenyaKIKiribatiKPKorea (Democratic People's Republic Of)KWKuwaitKGKyrgyzstanLALao People's Democratic RepublicLVLatviaLBLebanonLSLesothoLRLiberiaLYLibyan Arab JamahiriyaLILiechtensteinLTLithuaniaQLLithuania (Dummy Code)LULuxembourgMOMacauMKMacedoniaMGMadagascarMWMalawiMYMalaysiaMVMaldivesMLMaliMTMaltaMHMarshall IslandsMQMartiniqueMRMauritaniaMUMauritiusYTMayotteMXMexicoMBMexico BufferFMMicronesiaMDMoldovaMCMonacoMNMongoliaMSMontserratMAMoroccoMZMozambiqueMMMyanmarNANamibiaNRNauruNPNepalNLNetherlandsANNetherlands AntillesNCNew CaledoniaNZNew ZealandNINicaraguaNENigerNGNigeriaNUNiueNFNorfolk IslandsMPNorthern Mariana IslandsNONorwayOMOmanPKPakistanPWPalauPSPalestinian Occ. TerritoriesPAPanamaPGPapua New GuineaPYParaguayPEPeruPHPhilippinesPLPolandPTPortugalPRPuerto RicoQAQatarREReunionRORomaniaRWRuandaRURussian FederationLCSaint LuciaWSSamoaSMSan MarinoSTSao Tome & PrincipeSASaudi ArabiaSNSenegalSCSeychellesSLSierra LeoneSGSingaporeSKSlovakiaSISloveniaSBSolomon IslandsSOSomaliaZASouth AfricaGSSouth Georgia & South SandwichKRSouth KoreaSUSoviet UnionESSpainLKSri LankaSHSt. HelenaKNSt. Kitts and NevisPMSt. Pierre & MiquelonVCSt. Vincent & the GrenadinesSDSudanSRSurinameSJSvalbard & Jan Mayen IslandsSZSwazilandSESwedenCHSwitzerlandSYSyrian Arab RepublicTWTaiwanTJTajikistanTZTanzaniaTHThailandTGTogoTKTokelauTOTongaTTTrinidad and TobagoTNTunisiaTCTurcs & Caicos IslandsTRTurkeyTMTurkmenistanTVTuvaluUMU.S. Minor Outlaying IslandsUGUgandaUAUkraineAEUnited Arab EmiratesGBUnited Kingdom UYUruguay USUSAUZUzbekistan VUVanuatuVAVatican City StateVEVenezuelaVNVietnamVIVirgin Islands (US)WFWallis & Futuna IslandsEHWestern SaharaYEYemenYUYugoslaviaZMZambiaZWZimbabwe
[Error] => stdClass Object
(
[ErrorCode] => 0
[ErrorMessage] =>
)
[Status] => 1
[TokenId] => 1d49ba03-173f-49a9-ad07-b758b0ea2fc9
)

使用你给我们的字符串,你可以做到这一点

$str = "<Countries><Country><Code>AF</Code><Name>Afghanistan</Name></Coun‌​try><Country><Code>AL</Code><Name>Albania</Name></Country><Country><Code>DZ</Code‌​> <Name>Algeria</Name></Country><Country><Code>AS</Code><Name>American Samoa</Name></Country></Countries>";

$str = substr_delimeters($str, "<Countries>", "</Countries>");
$countries = explode("</Country>", $str);

echo "<select name='countries'>";

foreach($countries as $country)
{           
    if($country != '')
    {
        $country_name = substr_delimeters($country, "<Name>", "</Name>");

        $country_abrev = substr_delimeters($country, "<Code>", "</Code>");        

        echo "<option value='" . $country_abrev . "'>" . $country_name . "</option>";
    }
}    

echo "</select>";

function substr_delimeters($inputstr,$delimeterLeft,$delimeterRight) {
    if (empty($inputstr) || empty($delimeterLeft) || empty($delimeterRight)) return false;
    $posLeft  = stripos($inputstr,$delimeterLeft)+strlen($delimeterLeft);
    $posRight = stripos($inputstr,$delimeterRight,$posLeft+1);
    if (($posLeft===false) || ($posRight===false)) return false;
    return  substr($inputstr,$posLeft,$posRight-$posLeft);
}

或者你可以用这样的东西

$string = "<Countries><Country><Code>AF</Code><Name>Afghanistan</Name></Coun‌​try><Country><Code>AL</Code><Name>Albania</Name></Country><Country><Code>DZ</Code‌​> <Name>Algeria</Name></Country><Country><Code>AS</Code><Name>American Samoa</Name></Country></Countries>";
$dom = new DOMDocument();
$dom->loadXml($string);
$countries = $dom->getElementsByTagName('Country');
echo '<select name="countries">';
foreach($countries as $country) {
    $code = $country->getElementsByTagName('Code')->item(0)->nodeValue;
    $countryName = $country->getElementsByTagName('Name')->item(0)->nodeValue;
    echo sprintf('<option value="%s">%s</option>', $code, $countryName);
}
echo '</select>';

我希望这里并没有为国家代码显示一些字符串分隔符。根据SOAP服务提供商的说法,“CountryList”是xml类型。但是他们在他们的帮助文档中提到了,比如(回复)“CountryList”:“AFAfghanistanALAlbanaDZAlegariaASAmerican萨摩亚”,但是当我使用print nl2br打印时(print_r($resp_CountryList,true));它显示如上面QS所示的结果。使用echo“”;打印($xml)以查看正确的格式。给我们最原始的格式。不要试图纠正它。当我试图按照@Demodave所说的那样显示时,输出来自阿富汗、阿根廷、阿尔及利亚、美国、萨摩亚、阿根廷、马尔门尼亚瓦鲁巴奥、澳大利亚、巴西、巴西、巴西、巴林、孟加拉国、巴巴多斯、白俄罗斯(白俄罗斯)Bebelgiumbzbelizebjbbenibermudabthutanbobolibabosnia和Herzegowinabwbotswanabbouvet群岛……非常感谢。它现在运行良好。。。!再次感谢。@BINODDEKA如果这是一个可接受的答案,你应该检查它。