PHP的XPath检查是否存在节点

问题描述 投票:0回答:1

我有一个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节点值,如果存在,空字符串""在其他情况下分配?

php xpath
1个回答
3
投票

检查XPath返回任何节点

$cognome = $xpath->query( 'Anagrafica/Cognome', $nodelist);
$cognome = $cognome->length ? $cognome->item(0)->nodeValue : '';
© www.soinside.com 2019 - 2024. All rights reserved.