2013-09-19 3 views
1

PHP новичок здесь. Я написал сценарий, который анализирует XML-отчеты, полученные из API. В некоторых отчетах некоторые узлы не существуют, поэтому, когда я пытаюсь получить значение из узла, я получаю сообщение об ошибке «Примечание: попытка получить свойство не-объекта». Я не уверен, как справиться с этой проблемой, поскольку у меня есть сотни строк, таких как следующие, которые присваивают значения узлов ассоциативному массиву.PHP разбор пустых узлов из 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] || "" 

Если я ожидал этот вопрос, я бы обернутые каждое присваивание в функция с обработкой ошибок, но мне интересно, есть ли более простой подход, учитывая то, что у меня уже есть.

ответ

0

Я хотел бы использовать isset(), чтобы убедиться, что узел существует:

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

Кроме того, как Дейв отмечает в комментариях ниже, вы можете также использовать property_exists():

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

Это узлы в XML-документе, а не на PHP. В PHP они являются свойствами класса, поэтому 'property_exists()' будет иметь больше смысла, например 'if (property_exists ($ node, 'someValue'))' – Yang

0

вы можете просто сделать что-то вроде

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

который автоматически преобразует результат из xml-файла для строки и возврата emptystring, если он не существует. точно то, что вы хотите без тестирования

Смежные вопросы