Как проверить, существует ли узел в XML или нет? - PullRequest
0 голосов
/ 09 января 2020

Я использую этот код для анализа ответа XML от API. Получение ошибки Попытка получить свойство необъекта

$doc = new  \DOMDocument();
$doc->loadXML($response);
$doc->preserveWhiteSpace = false;
$doc->formatOutput = true;
$xml_string = $doc->saveXML();
$doc->loadXML($xml_string);

работает нормально, если выдает правильный результат, но если выдает ошибку, выдает сообщение об ошибке неопределенному объекту. Я получаю доступ к таким значениям, как это

if($doc->getElementsByTagName('accepted')->item(0)->nodeValue == true){
    $json = array(
        'success' => 1,
        'ACN' => $doc->getElementsByTagName('acn')->item(0)->nodeValue,
        'URL' => htmlspecialchars($doc->getElementsByTagName('certificateUrl')->item(0)->nodeValue)
    );

}else{
    $json = array(
        'success' => 0,
        'error' =>"",
    );
}

Так что, если значение принятого равно true, оно работает нормально и дает желаемый результат. Но если принят не существует, он выдает ошибку. Как я могу проверить, что узел существует или нет в XML? Любая помощь приветствуется.

1 Ответ

1 голос
/ 09 января 2020

DOM :: getElementsByTagName возвращает экземпляр DOMNodeList . Этот объект имеет свойство длины, которое вы можете проверить, прежде чем перейти к элементам в нем.

$acceptedItems = $doc->getElementsByTagName('accepted');
if ($acceptedItems->length > 0 && $acceptedItems->item(0)->nodeValue === 'true') {
    $json = array(
        'success' => 1,
        'ACN' => $doc->getElementsByTagName('acn')->item(0)->nodeValue,
        'URL' => htmlspecialchars($doc->getElementsByTagName('certificateUrl')->item(0)->nodeValue)
    );
} else {
    $json = array(
        'success' => 0,
        'error' => "",
    );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...