Registración Preguntas Home Pagos y Facturas Mapa del Sitio
Buscar:
Buscar Guías sobre:
Escribe una guía
Parser en PHP
Ver más Guías del autor
10 de 13 usuarios encontraron útil esta guía.
Modificada el 13/07/2006

Cuando escuchamos hablar acerca de XML o RSS también nos hablan de un parser, un script que permite obtener la información contenida en un documento XML. Si aún no conoces esta clase de documentos dirígete al tutorial sobre XML haciendo clic aquí.

El lenguaje PHP cuenta con funciones que te permiten generar un parser de acuerdo con tus necesidades.

Un intérprete de XML tiene tres partes importantes, estas son:

1. Identificación del inicio de cada elemento. Esto se hace mediante la función la función que definiremos:

Function startElement --> Con esta función podemos decirle al script que identifique la etiqueta de inicio de cada elemento del archivo XML. Por ejemplo con el XML de MercadoLibre podemos indicarte que el elemento inicia al encontrar la etiqueta <item>.

2. Lectura de las variables de cada elemento. De esta manera podemos asignar en variables el contenido de cada etiqueta interna.

Function charelement --> Utilizando esta función le indicamos que cada vez que encuentre cierta etiqueta, guarde el valor en una variable que luego utilizaremos para generar la salida de los datos. Por ejemplo la etiqueta <price> contiene el precio del producto, una ves hemos identificado esa etiqueta podemos asignarla a una variable para usar la después.

3. identificación del final de cada elemento. Al igual que identificamos el inicio de un elemento, es necesario indicarle al script en que momento termina el elemento y debe ejecutar el ciclo nuevamente para identificar el siguiente. Para ello se usa la función:

Function endelement --> Usando esta función indicamos que el elemento que estamso leyendo termina, en este caso, cuando esta funcion encuentra nuevamente la etiqueta </item> sabe que el elemento ha terminado.

Por último se establecen otras funciones de manejo de intérpretes donde definimos el nombre que hemos asignado a cada función y le solicitamos al script que repita el proceso hasta el momento cuando termine el documento XML.

A continuación desarrollaremos un ejemplo donde crearás un archivo XML con texto y links el cual luego parsearemos y podrás mostrar en tu página.

Primero abre un editor de texto como bloc de notas y escribe lo siguiente:

<"xml version="1.0" encoding="iso-8859-1"">

<bestproducts catidad="3">

<textlink>

<link>http://listado.mercadolibre.com.co/

_CategID_7162_DisplayType_G_PrCategId__OrderId_MAS*OFERTADOS_JSEA</link>

<text>MP3 con Memoria USB</text>

</textlink>

<textlink>

<link>http://listado.mercadolibre.com.co

/_CategID_1042_DisplayType_G_FiltroId_CERTIFIED_PrCategId__OrderId_MAS*OFERTADOS_JSEA

</link>

<text>Cámaras Digitales</text>

</textlink>

<textlink>

<link>http://listado.mercadolibre.com.co/

_CategID_5027_DisplayType_G_FiltroId_CERTIFIED_PrCategId__OrderId_MAS*OFERTADOS_JSEA

</link>

<text>Memorias USB</text>

</textlink>

<textlink>

<link>

http://listado.mercadolibre.com.co/_DisplayType_G_FilterId_MAS*VND_JSEA</link>

<text>

Más Vendidos</text>

</textlink>

</bestproducts>

Guarda el archivo con el siguiente nombre "texto.xml" de esta forma ya tienes el rachivo XML que vamos a parsear. Compara su estructura con el XML de MercadoLibre ¿En encuentras algo parecido?

Ahora vamos a crear el parser o intérprete para el XML especifico que hemos desarrollado:

<

/// PARSER PARA MOSTRAR TEXT-LINK

///Cantidad de item´s a mostrar:

$h=2;

///Site ID

$siteid='331212';

///Pais predeterminado

$pais_pred='MCO';

///

///

///

///

$pais="";

if(!isset($pais) || ($pais == '')) {

if(isset($_GET['pais']) && ($_GET['pais']!='')) { $pais = $_GET['pais']; } else { $pais = $pais_pred; }

}

/// Con estas funciones podemos identificar el país correspondiente.

///

error_reporting(0);

$sl_xmlfile ="texto.xml";

$insideitem = false;

$contador = 0;

$elarray = array();

///Com las variables que defimos en las dos líneas anteriores.

///De aquí en adelante inician las funciones para leer cada elemento. Este caso cada Tex Link.

function startelement($parser, $name, $attrs) {

global $insideitem,$sl_tag;

if(($name == 'text')||($name == 'link')) {

$insideitem = true;

$sl_tag = $name;

}

}

function charelement($parser, $data) {

global $insideitem,$sl_tag,$elarray,$contador;

if ($insideitem) {

switch ($sl_tag) {

case "link":

$elarray[$contador]['link'] = trim($data);

break;

case "text":

$elarray[$contador]['text'] = trim($data);

break;

}

}

}

function endelement($parser, $name) {

global $insideitem,$contador;

if (($name == 'text')||($name == 'link')) {

$insideitem = false;

}

if($name == 'textlink') {

$contador++;

}

}

$parser_element = xml_parser_create();

xml_set_element_handler($parser_element, "startelement", "endelement");

xml_parser_set_option($parser_element,XML_OPTION_CASE_FOLDING,0);

xml_set_character_data_handler($parser_element, "charelement");

if (!($fp = fopen($sl_xmlfile, "r"))) {

die("could not open XML input");

}

while ($data = fread($fp, 4096))

xml_parse($parser_element, $data, feof($fp))

or die(sprintf("XML error: %s at line %d",

xml_error_string(xml_get_error_code($parser_element)),

xml_get_current_line_number($parser_element)));

fclose($fp);

xml_parser_free($parser_element);

/////print_r($elarray);

//// De aquí en adelante se arma el link de traqueo con el Site ID que se coloca al principio del script y finalmente se imprime.

$track="";

switch ($pais){

case "MCO": case "co": case "colombia": case "COLOMBIA": case "Colombia":

$track='http://www.mercadolibre.com.co/jm/pms_site='.$siteid.'&id=2021&as_opt=';

break;

case "MLA": case "ar": case "argentina": case "ARGENTINA": case "Argentina":

$track='http://www.mercadolibre.com.ar/jm/pms_site='.$siteid.'&id=2021&as_opt=';

break;

case "MLC": case "cl": case "chile": case "CHILE": case "Chile":

$track='http://www.mercadolibre.cl/jm/pms_site='.$siteid.'&id=2021&as_opt=';

break;

case "MLU": case "uy": case "uruguay": case "URUGUAY": case "Uruguay":

$track='http://www.mercadolibre.com.uy/jm/pms_site='.$siteid.'&id=2021&as_opt=';

break;

case "MLM": case "mx": case "mexico": case "MEXICO": case "Mexico":

$track='http://www.mercadolibre.com.mx/jm/pms_site='.$siteid.'&id=2021&as_opt=';

break;

case "MLV": case "ve": case "venezuela": case "VENEZUELA": case "Venezuela":

$track='http://www.mercadolibre.com.ve/jm/pms_site='.$siteid.'&id=2021&as_opt=';

break;

case "MLB": case "br": case "brasil": case "BRASIL": case "Brasil":

$track='http://www.mercadolivre.com.br/jm/pms_site='.$siteid.'&id=2021&as_opt=';

break;

case "MEC": case "ec": case "ecuador": case "ECUADOR": case "Ecuador":

$track='http://www.mercadolibre.com.ec/jm/pms_site='.$siteid.'&id=2021&as_opt=';

break;

case "MPE": case "pe": case "peru": case "PERU": case "Peru":

$track='http://www.mercadolibre.com.pe/jm/pms_site='.$siteid.'&id=2021&as_opt=';

break;

}

for($i=0; $i<$h;$i++){

echo '<a href="',$track,$elarray[$i]['link'],'">';

echo $elarray[$i]['text'],'</a><br>';

}

>

En un archivo pega el código PHP, guarda el archivo como parser.php y luego colócalos en la misma carpeta y en un servidor de prueba, remoto a local, ejecuta el archivo parser.php.

Utilizado el parser que has desarrollado en esta sección puedes desarrollar uno para cualquier clase de archivo de XML.

Palabras Clave: Mercadosocios | Parser | Php | Programación | Scripts
10 de 13 usuarios encontraron útil esta guía.
El autor asume la total responsabilidad por el contenido de esta guía.
¿Crees que esta guía está en contra de las Políticas de MercadoLibre? Infórmalo aquí.
En esta sección encontrarás información publicada por Usuarios bajo su exclusiva responsabilidad. MercadoLibre no controla los contenidos de las Guías y no responderá por información inexacta, errónea o difamatoria, o por el uso que se haga de ella. El ingreso a la misma es decisión voluntaria del navegante quien acepta la posibilidad de encontrar material que puede afectar su susceptibilidad.
Contenido provisto por



Volver arriba