PHP Xpath проверяет, существует ли узел - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть 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 голосов
/ 06 февраля 2019

Проверить, что xpath возвращает любой узел

$cognome = $xpath->query( 'Anagrafica/Cognome', $nodelist);
$cognome = $cognome->length ? $cognome->item(0)->nodeValue : '';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...