繁体   English   中英

PHP从XML解析空节点

[英]PHP parsing empty nodes from XML

PHP新手在这里。 我编写了一个脚本,用于分析从API提取的XML报告。 在某些报告中,某些节点不存在,因此当我尝试从该节点获取值时,出现错误“注意:试图获取非对象的属性”。 我不确定如何处理此问题,因为我有如下几百行代码,它们将节点值分配给关联数组。

$reportItems['propertyBaths'] = $report187->PropertyProfile->PropertyCharacteristics->Baths[0];
$reportItems['propertyRooms'] = $report187->PropertyProfile->PropertyCharacteristics->TotalRooms[0];
$reportItems['propertyYear'] = $report187->PropertyProfile->PropertyCharacteristics->YearBuilt[0];

在不存在节点的情况下,我想分配一个空字符串。 我想知道是否有一种简单的方法来执行此操作,而不必彻底改变我已经编写的内容,例如:

$reportItems['propertyBaths'] = $report187->PropertyProfile->PropertyCharacteristics->Baths[0] || ""

如果我预料到了这个问题,我会将每个赋值都包装在具有错误处理功能的函数中,但是我想知道是否有一种简单的方法可以解决我已有的问题。

我将使用isset()来确保该节点存在:

if(isset($node->SomeValue)) {
    $arr['item'] = $node->SomeValue;
} else {
    $arr['item'] = ''
}

另外,正如Dave在以下评论中指出的那样,您还可以使用property_exists()

if (property_exists($node, 'someValue')) {
    $arr['item'] = $node->SomeValue;
} else {
    $arr['item'] = '';
}

你可以做类似的事情

$reportItems['propertyBaths'] = ''.$report187->PropertyProfile->PropertyCharacteristics->Baths[0];

这将自动将xml子级的结果转换为字符串,如果不存在则返回空字符串。 无需测试即可满足您的需求

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM