Php 如果字段不';不存在?
我正在解析从另一台服务器发送到我的站点的已发布加密和已发布XML文件 目前,XML(解密)分类如下所示: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 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
不存在