3

成功に応じてマークアップが変更された場合、USPSのアドレス検証からのxmlリターンをどのように解析しますか?
たとえば、返品が有効な場合は取得しA)、そうでない場合は取得しB)ます。A)ノードに<Error>存在せず、エラーが発生した場合は、そのエラーを出力したいと思います。ありますが、XMLを解析するためのそのようなことは聞いたことがありません
PHPisset()

A)

<?xml version="1.0"?>
<AddressValidateResponse>
    <Address ID="0">
        <Address2>123 MAIN ST</Address2>
        <City>SPRINGFIELD</City>
        <State>NY</State>
        <Zip5>11111</Zip5>
        <Zip4>1111</Zip4>
    </Address>
</AddressValidateResponse>

B)

<?xml version="1.0"?>
<AddressValidateResponse>
    <Address ID="0">
        <Error>
            <Number>-45DF6S45F</Number>
            <Source>API_AddressCleancAddressClean.CleanAddress2;SOLServer.CallAddressDll</Source>
            <Description>Address Not Found.  </Description>
            <HelpFile></HelpFile>
            <HelpContext>1000440</HelpContext>
        </Error>
    </Address>
</AddressValidateResponse>

現在、次のようなjqueryを使用してxmlを解析しています。

$.ajax({
    type: "POST",
    url: "usps_xml_verify.php",
    data: {<PASS IN VARIABLES>},
    dataType: "xml",
    success: function(xml) {
        $(xml).find('Address').each(function(){
            var Address2 = $(this).find('Address2').text();
            var Zip5 = $(this).find('Zip5').text();
            //etc...
        });
    }
}); 
4

1 に答える 1

2

ソリューションを盲目的に繰り返す代わりに、最初にfind findメソッドを再度使用して、エラーノードがあるかどうかを確認します。

var addr = $(xml).find('Address')

var err = addr.find('Error');
if(err.length > 0){
    //found at least one error node, process them here
}else{
    //no error nodes, continue normally:
    addr.each(function(){
        var Address2 = $(this).find('Address2').text();
        var Zip5 = $(this).find('Zip5').text();
        //etc...
    });
}

これはおそらく最も慣用的な解決策ではありませんが、このようなものは機能するはずです。jQueryは単なるJavascriptライブラリであることを忘れないでください!通常のJavascriptコードと同じように、メソッドを呼び出して変数に入れることができます。

于 2013-01-04T00:20:00.197 に答える