PHP Xpath检查节点是否存在

时间:2019-02-06 09:39:46

标签: 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;

}

效果很好。但是节点Cognome在XML中是可选的,因此有时它不存在,例如:

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

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

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

1 个答案:

答案 0 :(得分:3)

确保xpath返回任何节点

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