El elemento <Success />
es un empty element, lo que significa que no tiene ningún valor. Es a la vez, Etiqueta de inicio y finalización.
Puede test for existence of nodes with the XPath function boolean()
La función booleana convierte su argumento a un valor lógico de la siguiente manera:
- un número es verdadero si y sólo si no es ni positiva o negativa cero ni NaN
- un conjunto de nodos es verdadero si y solo si no está vacío
- una cadena es verdadera si y solo si su longitud es distinta de cero
- un objeto de un tipo distinto a los cuatro tipos básicos se convierte en un valor lógico de una manera que depende de ese tipo
Para hacer eso con DOMXPath
es necesario utilizar el método DOMXPath::evaluate()
porque devolverá un resultado escrito, en este caso un boolean
:
$xml = <<< XML
<OTA_PingRS>
<Success />
<EchoData>This is some test data</EchoData>
</OTA_PingRS>
XML;
$dom = new DOMDocument;
$dom->loadXml($xml);
$xpath = new DOMXPath($dom);
$successNodeExists = $xpath->evaluate('boolean(/OTA_PingRS/Success)');
var_dump($successNodeExists); // true
demo
Por supuesto, también puede simplemente consultar los /OTA_PingRS/Success
y ver si hay resultados en el DOMNodeList
devuelto:
$xml = <<< XML
<OTA_PingRS>
<Success />
<EchoData>This is some test data</EchoData>
</OTA_PingRS>
XML;
$dom = new DOMDocument;
$dom->loadXml($xml);
$xpath = new DOMXPath($dom);
$successNodeList = $xpath->evaluate('/OTA_PingRS/Success');
var_dump($successNodeList->length);
demo
También puede utilizar SimpleXML:
$xml = <<< XML
<OTA_PingRS>
<Success />
<EchoData>This is some test data</EchoData>
</OTA_PingRS>
XML;
$nodeCount = count(simplexml_load_string($xml)->xpath('/OTA_PingRS/Success'));
var_dump($nodeCount); // 1
La manera normal, ¿qué has probado? – Musa