tengo un pequeño problema.
dejo en claro desde el principio que soy diseñador y mis nociones de programación snn mas bien básicas.
el siguiente código me ayuda a darle "lectura" a algunos archivos que tengo en formato xml.
Código:
al final despliego las noticias con el siguiente código.
//obtencion de noticias:
//Secciones:
$secciones = Array();
$secciones[0] = "http://www.sitio.com/noticias/espanol/periodico/ciencia-tecnologia/";
$secciones[1] = "http://www.sitio.com/noticias/espanol/periodico/deportes/";
$secciones[2] = "http://www.sitio.com/noticias/espanol/periodico/gente/";
//para desplegar el nombre de cada noticia:
$nombreSeccion = Array();
$nombreSeccion[0] = "Tecnología";
$nombreSeccion[2] = "Deportes";
$nombreSeccion[4] = "Gente";
//Array para guardar los titulos:
$titulos = Array();
//Array para guardar los thumbnails:
$thumbs = Array();
//Array para guardar los paths:
$paths = Array();
$print=false;
$tituloOK = false;
$thumbOK = true;
//contadores global:
$contGeneral = 0;
$contGeneralPaths = 0;
$contGeneralThumbs = 0;
//obtiene las 2 primeras noticias de cada secccion, en el orden en que aparecen arriba:
foreach($secciones as $seccion => $value)
{
//abre el index.xml y obtiene las rutas de los archivos XML de cada noticia:
//echo "<hr>abre ".$value."...<br>";
$cont=0;
$contPaths=0;
//auxiliar indice actual de Seccion:
$seccionActualIndex++;
$tituloOK = false;
$parser=xml_parser_create();
xml_set_element_handler($parser,"start","stop");
//Specify data handler
xml_set_character_data_handler($parser,"char");
//Open XML file
$fp=fopen($value."index.xml","r");
//Read data
while ($data=fread($fp,4096))
{
xml_parse($parser,$data,feof($fp)) or die (sprintf("XML Error: %s at line %d",
xml_error_string(xml_get_error_code($parser)),
xml_get_current_line_number($parser)));
}
//Free the XML parser
xml_parser_free($parser);
}
//Function to use at the start of an element
function start($parser,$element_name,$element_attrs)
{
global $titulos, $path, $thumb, $cont, $section, $print, $tituloOK, $paths, $contGeneralPaths, $contPaths, $secciones, $seccionActualIndex, $thumbOK;
switch($element_name)
{
case "HEADLINE": //titulos:
$tituloOK = true;
$section = "titulo";
break;
case "NEWSITEMREF"://path del XML de detalle:
foreach ($element_attrs as $key => $value)
{
if (strpos($value,"xml") != false && $contPaths<=1)
{
$thumbOK = true;
$paths[$contGeneralPaths]= $secciones[$seccionActualIndex-1].$value;
$contGeneralPaths++;
$contPaths++;
//obtiene la ruta del thumnail del XML de detalle:
$parser2=xml_parser_create();
xml_set_element_handler($parser2,"start2","stop");
//Specify data handler
xml_set_character_data_handler($parser2,"char2");
//Open XML file
//$fp=fopen($secciones[$seccionActualIndex-1].$value,"r");
$fp=fopen($secciones[$seccionActualIndex-1].$value,"r");
//Read data
while ($data=fread($fp,4096))
{
xml_parse($parser2,$data,feof($fp)) or die (sprintf("***XML Error: %s at line %d",
xml_error_string(xml_get_error_code($parser2)),
xml_get_current_line_number($parser2)));
}
//Free the XML parser
xml_parser_free($parser2);
//<---
}
}
break;
}
}
//Function to use when finding character data
function char($parser,$data)
{
global $titulos, $path, $thumb, $cont, $print, $section, $tituloOK, $contGeneral;
$la = $section;
switch($section)
{
case "titulo":
if ($tituloOK && $cont<=1)
{
//echo "<hr>".$data."<hr>";
$titulos[$contGeneral] = $data;
$tituloOK = false;
$contGeneral++;
$cont++;
}
break;
case "contenido":
$contenido = $contenido.$data;
break;
}
}
function char2($parser,$data)
{
}
function start2($parser,$element_name,$element_attrs)
{
global $thumbs, $contGeneralThumbs, $seccionActualIndex,$secciones, $thumbOK;;
switch($element_name)
{
case "CONTENTITEM":
foreach ($element_attrs as $key => $value)
{
if (strpos($value,"thumbnail") != false && $thumbOK==true)
{
$thumbs[$contGeneralThumbs]=$secciones[$seccionActualIndex-1].$value;
$contGeneralThumbs++;
$thumbOK=false;
}
}
break;
}
}
//Function to use at the end of an element
function stop($parser,$element_name)
{
//echo "<hr />";
}
//fin obtencion de noticias
Código:
lo cual funciona perfectamente, sin embargo por cuestiones de maquetación necesito agrupar las noticias de cada sección: Tecnología, Deportes y Gente dentro de un div cada una.<?
//despliega noticias:
$contDisplay=0;
foreach($titulos as $titulo => $value)
{
if ($contDisplay==0 || $contDisplay==2 || $contDisplay==4)
{
echo "<div class='TitularSeccionNoticias'>".$nombreSeccion[$contDisplay].":</div>";
}
?>
<div class="noticia">
<a href="noticias/?f=<?=$paths[$contDisplay]?>" ><img src="<?=$thumbs[$contDisplay]?>" alt="Cablemas.com" longdesc="Tecnologia"/></a>
<p><?=$value?>...<p>
<div class="CreditoAFP">AFP</div>
</div>
<?
$contDisplay++;
}
?>
he intentado abrir un div antes de mostrar el titulo pero no se donde cerrarlo.
agradezco de antemano su paciencia ante tanto código.
saludos.
NOTA: por un error de esos que no me explico confundí en el titulo css por xml :P

