Foros del Web » Programando para Internet » PHP »

Distinct con Dom y Xpath

Estas en el tema de Distinct con Dom y Xpath en el foro de PHP en Foros del Web. Hola a todos Tengo el siguiente archivo xml del cual mediante Dom y Xpath obtengo los productos de todos o un país determinado. Código: <?xml ...
  #1 (permalink)  
Antiguo 04/04/2011, 12:22
 
Fecha de Ingreso: julio-2010
Mensajes: 41
Antigüedad: 13 años, 9 meses
Puntos: 7
Pregunta Distinct con Dom y Xpath

Hola a todos
Tengo el siguiente archivo xml del cual mediante Dom y Xpath obtengo los productos de todos o un país determinado.
Código:
<?xml version="1.0" encoding="utf-8"?>
   <row country='England' product='Shoes' />
   <row country='Germany' product='T-Shirts' />
   <row country='Brazil' product='Hat' />
   <row country='Japan' product='Jeans' />
   <row country='Brazil' product='T-Shirts' />
   ...
   ...
   ...
Código PHP:
function get_products($file$param=null){
        
$dom = new DOMDocument();
        
$dom->load("$file");

        if (
$param == null || $param == 'sin filtro') {
            
$rows $dom->getElementsByTagName('row');
        } else {
            
$xpath = new DOMXpath($dom);
            
$query "//z:row[@country='$param']";
            
$rows $xpath->query("$query");
        }
        return 
$rows;
    } 
mi duda es si existe alguna forma de hacer un distinct para obtener el listado total de países sin que se repita ninguno.

Saludos y Gracias de antemano
  #2 (permalink)  
Antiguo 04/04/2011, 14:30
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Distinct con Dom y Xpath

Que tal orlandopc09,

podrías utilizar preceding-sibling para conseguirlo, algo así:

Código PHP:
Ver original
  1. $query = "row[not(@country=preceding-sibling::row/@country)]/@country";

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #3 (permalink)  
Antiguo 05/04/2011, 12:36
 
Fecha de Ingreso: julio-2010
Mensajes: 41
Antigüedad: 13 años, 9 meses
Puntos: 7
Respuesta: Distinct con Dom y Xpath

Muchísimas gracias masterpuppet por responder, me funciono bien solo tuve que hacerle un pequeño cambio, quitarle la ultima parte del query /@country, con esa linea cuando me daba un error "Call to undefined method DOMAttr::getAttribute()" sabes a que se debe esto.
Al final me quedo así
Código XML:
Ver original
  1. public function get_country($file) {
  2.         $dom = new DOMDocument();
  3.         $dom->load("$file");
  4.         $xpath = new DOMXpath($dom);
  5.         $query = "//row[not(@country=preceding-sibling::z:row/@country)]";        
  6.         $rows = $xpath->query("$query");
  7.         return $rows;
  8.     }

Etiquetas: distinct, dom
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:28.