php - 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
如果存在,我如何修改我的代码以分配变量节点值,""
在其他情况下为空字符串?
解决方案
检查 xpath 返回任何节点
$cognome = $xpath->query( 'Anagrafica/Cognome', $nodelist);
$cognome = $cognome->length ? $cognome->item(0)->nodeValue : '';
推荐阅读
- swift - UICollectionView 的奇怪自动布局问题
- python - pandas cumsum 基于列的条件
- c# - 控制台:禁用 Shift+箭头键(文本选择模式)
- azure - 失败时的 Azure 数据工厂复制活动 | 未评估表达式
- javascript - javascript中的回调(参数传递)
- python - 使用 Python 进行声学信号处理
- machine-learning - 当数据不是分类的并且确定它们不切实际时,我应该如何处理 NaN 值?
- spring-boot - spring boot 1.3.0发布版中使用Spring重试和熔断器
- javascript - 画出画布 JavaScript
- spring - Kafka Connect 如何使命名空间与数据库名称无关