Ya por fin, ok este es el ejercicio, cuando yo hago esto
Código PHP:
Ver original$xml = '<foo>
<candy att="fruits">fruits</candy>
<candy att="vegetable">vegetable</candy>
<candy att="pizza">pizza</candy>
<candy att="pizza">pizza</candy>
<candy att="twix">twix</candy>
</foo>';
$obj = new SimpleXMLElement($xml);
foreach($obj->xpath('//candy[not(@att=preceding-sibling::candy/@att)]/@att') as $v){
echo $v->att . '<br />';
}
Imprime:
fruits
vegetable
pizza
twix
Evitando que se repitan. Pero si hago esto
Código PHP:
Ver original<?php
$xml = '<foo>
<bar>
<baz>
<candy att="fruits">fruits</candy>
</baz>
</bar>
<bar>
<baz>
<candy att="vegetable">vegetable</candy>
</baz>
</bar>
<bar>
<baz>
<candy att="pizza">pizza</candy>
</baz>
</bar>
<bar>
<baz>
<candy att="pizza">pizza</candy>
</baz>
</bar>
<bar>
<baz>
<candy att="twix">twix</candy>
</baz>
</bar>
</foo>';
$obj = new SimpleXMLElement($xml);
foreach($obj->xpath('//candy[not(@att=preceding-sibling::candy/@att)]/@att') as $v){
echo $v->att . '<br />';
}
Imprime:
fruits
vegetable
pizza
pizza
twix
Mostrando los que se repiten. ¿Por qué y cómo se puede solucionar en una sola línea usando xpath una sola vez?