如何检查 XML 中是否存在节点?

我正在使用此代码来解析来自 API 的 XML 响应。获取错误尝试获取非对象的属性


$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 中?任何帮助表示赞赏。


翻翻过去那场雪
浏览 220回答 1
1回答

斯蒂芬大帝

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' => "",    );}
打开App,查看更多内容
随时随地看视频慕课网APP