3

如果标记根据成功发生变化,我将如何解析来自 USPS 地址验证的 xml 返回?
例如,如果返回有效,我得到A),如果不是,我得到B)。在A)节点<Error>中不存在并且如果有错误我想输出那个错误。
PHP那里isset(),但我从来没有听说过类似的解析 XML 的东西。

一个)

<?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>

二)

<?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 回答