首页 > 解决方案 > PHP Xpath 检查节点是否存在

问题描述

我有一个 XML( $fileXML ),例如:

<FatturaElettronicaHeader>
   <CedentePrestatore>
      <DatiAnagrafici>
        <Anagrafica>
          <Denominazione>MY STORE SRL</Denominazione>
          <Cognome>Rossi</Cognome>
        </Anagrafica>
      </DatiAnagrafici>
   </CedentePrestatore>
</FatturaElettronicaHeader>

我使用这个函数来检索一些值:

$xml = new DOMDocument();
$xml->loadXML($fileXML);
$xpath = new DOMXPath($xml);            
$nodes = $xpath->query('//CedentePrestatore/DatiAnagrafici');
foreach ($nodes as $nodelist) {

  $denominazione = $xpath->query( 'Anagrafica/Denominazione', $nodelist)->item(0)->nodeValue;
  $cognome = $xpath->query( 'Anagrafica/Cognome', $nodelist)->item(0)->nodeValue;

}

它工作得很好。但是 nodeCognome在 XML 中是可选的,所以有时它不存在,比如:

<FatturaElettronicaHeader>
   <CedentePrestatore>
      <DatiAnagrafici>
        <Anagrafica>
          <Denominazione>MY SHOP2 SRL</Denominazione>
        </Anagrafica>
      </DatiAnagrafici>
   </CedentePrestatore>
</FatturaElettronicaHeader>

然后我的脚本出错:Trying to get property of non-object

$cognome如果存在,我如何修改我的代码以分配变量节点值,""在其他情况下为空字符串?

标签: phpxpath

解决方案


检查 xpath 返回任何节点

$cognome = $xpath->query( 'Anagrafica/Cognome', $nodelist);
$cognome = $cognome->length ? $cognome->item(0)->nodeValue : '';

推荐阅读