Con
DOM
se puede utilizar
$dom->getElementsByTagName('OfferName')->length;
para contar todos los elementos sólo OfferName. length
is an attribute of DOMNodeList
.
Contar todos los elementos dentro de una OfferName OfferNameList, puede utilizar DOMXPath::evaluate
$xpath->evaluate('count(//OfferNameList/OfferName');
Tenga en cuenta que dentro de es algo inexacto aquí como la consulta XPath sólo considerará hijos directos. Ajuste su pregunta si necesita elementos OfferName en cualquier lugar debajo de un elemento OfferNameList.
También tenga en cuenta que //
consultará en cualquier lugar del documento, lo que puede ser menos eficiente para documentos grandes. Si sabe que los elementos de OfferNameList se encuentran en una determinada posición solo en su XML, use una ruta directa. ejemplo
completa de trabajo (run on codepad):
$xml = <<< XML
<root>
<NotOfferNameList>
<OfferName>...</OfferName>
<OfferName>...</OfferName>
<OfferName>...</OfferName>
</NotOfferNameList>
<OfferNameList>
<OfferName>...</OfferName>
<OfferName>...</OfferName>
<OfferName>...</OfferName>
</OfferNameList>;
</root>
XML;
$dom = new DOMDocument;
$dom->loadXml($xml);
// count all OfferName elements
echo $dom->getElementsByTagName('OfferName')->length, PHP_EOL; // 6
// count all OfferNameList/OfferName elements
$xp = new DOMXPath($dom);
echo $xp->evaluate('count(//OfferNameList/OfferName)'); // 3
¡Gracias por el ejemplo del código! Por favor, podría publicar esto en su pregunta para que los futuros lectores puedan ver esto en caso de que el enlace de arriba desaparezca. – Martin
@Martin, de nada. ¡Hecho! – Gordon
¡Gracias! Bien respondido y muy apreciado! – Martin