解析多态XML

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>

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...
        });
    }
}); 
1个回答

2

不要盲目地迭代解决方案,首先使用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代码一样调用方法和将内容放入变量中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接