Php 如果字段不';不存在?

Php 如果字段不';不存在?,php,xml,Php,Xml,我正在解析从另一台服务器发送到我的站点的已发布加密和已发布XML文件 目前,XML(解密)分类如下所示: <?xml version='1.0' encoding='UTF-8' standalone='yes'?> <transactions> <transaction> <id>407145</id> <store_id>4067</store_id> <custom_field

我正在解析从另一台服务器发送到我的站点的已发布加密和已发布XML文件

目前,XML(解密)分类如下所示:

<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<transactions>
<transaction>
    <id>407145</id>
    <store_id>4067</store_id>
    <custom_fields>
        <custom_field>
            <custom_field_name>affiliateID</custom_field_name>
            <custom_field_value>25</custom_field_value>
        </custom_field>
        </custom_fields>
</transaction>
</transactions>   
$XMLData = rc4crypt::decrypt($key, urldecode($_POST["XMLData"]));
$data = new XMLParser($FoxyData);   // Parse that XML.
$data->Parse();

// go through each of the nodes
foreach ($data->document->transactions[0]->transaction as $tx) {

    $id = $tx->id[0]->tagData;
    $store_id = $tx->id[0]->tagData;

    // get the affiliateID
    foreach ($tx->custom_fields[0]->custom_field as $field) {
    $affiliateID = $field->custom_field_value[0]->tagData;
}



}
除非发送到我们的服务器的XML缺少自定义字段节点,否则上述方法有效。然后它抛出一个错误“Undefined property:XMLTag::$custom\u field”

因为我是一名黑客,所以我认为下面的方法可以奏效,但事实并非如此:

if($tx->custom_fields[0]->custom_field) {

   foreach ($tx->custom_fields[0]->custom_field as $field) {
    $affiliateID = $field->custom_field_value[0]->tagData;
}

}

这在我看来似乎合乎逻辑——但我的逻辑有什么问题?如果xml中不存在该节点,我如何告诉脚本不要执行foreach?

您应该首先检查$tx->custom\u字段和$tx->custom\u字段[0]的存在,然后进一步使用它。

我想这可能就是您要查找的:

if (isset($tx->custom_fields[0]->custom_field)) {
    foreach ($tx->custom_fields[0]->custom_field as $field) {
        $affiliateID = $field->custom_field_value[0]->tagData;
    }
}
请注意,无需检查
$tx->custom_fields
,然后分别在最深层使用isset()将返回false(而不是导致错误),即使
$tx->custom_fields
不存在