【问题标题】:How to check if node existst in the XML or not?如何检查节点是否存在于 XML 中?
【发布时间】:2020-01-09 15:02:24
【问题描述】:

我正在使用此代码来解析来自 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 中?任何帮助表示赞赏。

【问题讨论】:

    标签: php xml laravel


    【解决方案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' => "",
        );
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-13
      • 1970-01-01
      • 1970-01-01
      • 2016-08-29
      • 2013-03-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多