<?php
/*****************************************************
* RegEXml *
* by *
* Stefano V. *
* hide@address.com *
*****************************************************/
class RegEXml {
/**
* Apre un File
*
* Apre un File in Lettura e ne Restituisce il Contenuto.
*
* @author Stefano V. <hide@address.com>
*
* @param string $file Nome del File da Aprire
* @return string Contenuto del File
*/
function get_file($file)
{
// azzera la var
$string = "";
// apre il file in lettura
$fd = fopen($file, "r");
// se non si può aprire da errore
if($fd=="")
die("Impossibile Aprire il File");
while (!feof ($fd)) { // legge fino alla fine
// prende un chunk di 4096 bytes
$buffer = fgets($fd, 4096);
// aggiunge il chunk alla stringa
$string.=$buffer;
}
// chiude il file
fclose ($fd);
// ritorna il valore
return $string;
}
/**
* Restituisce un elemento XML
*
* Restituisce un elemento XML da un file passato come parametro.
*
* @author Stefano V. <hide@address.com>
*
* @param string $tag Nome del Tag XML da cercare
* @param string $xml Nome del file XML da processare
* @return string Stringa contenente il valore del Tag XML
*/
function get_xml_tag($tag, $xml)
{
// se l'elemento non esiste, restituisce una stringa vuota
if (!eregi("(<$tag>|<$tag [^>]+>).*</$tag>", $xml)) {
return "";
}
// in buff vengono tolti i tag di apertura e chiusura
$buff = ereg_replace(".*(<$tag>|<$tag [^>]+>)", "", $xml);
$buff = ereg_replace("</".$tag.">.*", "", $buff);
// restituisce la stringa
return $buff;
}
/**
* Restituisce l'array di un ramo di elementi XML
*
* Restituisce l'array di un ramo di elementi XML da un file passato come parametro.
*
* @author Stefano V. <hide@address.com>
*
* @param string $tag Nome del ramo di elementi XML da cercare
* @param string $xml Nome del file XML da processare
* @return array Array contenente il ramo di elementi XML
*/
function get_array_tag($tag, $xml)
{
// splitta per </tag>
$buff = explode("</".$tag.">", $xml);
// elimina l'ultimo
array_splice ($buff, count($buff)-1);
// svuota la var
$buffelement = "";
// crea un nuovo array
$newbuff = array();
// per ogni elemento in $buff
foreach($buff as $buffelement){
// mette i tag in newbuff
$newbuff[] = eregi_replace("^.*(\<$tag\>|\<$tag [^>]+\>)","",ltrim($buffelement));
}
// restituisce l'array
return $newbuff;
}
/**
* Restituisce l'attributo di un Tag
*
* Restituisce il contenuto dell'attributo di un tag
*
* @author Stefano V. <hide@address.com>
*
* @param string $tag Nome del ramo di elementi XML da cercare
* @param string $attrib Nome dell'attributo da cercare
* @param string $xml Nome del file XML da processare
* @return string Stringa contenente il contenuto dell'attributo
*/
function get_tag_attrib($tag, $attrib, $xml)
{
// pattern che ottiene < - TAG - PROP='VAL' - >
$diviso = eregi(".*(<)($tag) ([^>]+)(>)", $xml, $reqs);
// ottiene solo la 3a parte
$attributi = trim($reqs[3]);
// pattern che ottiene: TESTO - $attrib - VAL - TESTO
$attributo = eregi("(.*)($attrib=)(\"[^\"]+\"|'[^']+')(.*)",$attributi, $req);
// prende solo la 2a e 3a parte trimmando
$attributo = trim($req[2].$req[3]);
// splitta per " o '
$final = spliti("(\"|')",$attributo);
// restituisce l'array 1
return $final[1];
}
/**
* Restituisce un Array di Attributi
*
* Restituisce un Array contenente gli Attributi del Tag e i Relativi Valori
*
* @author Stefano V. <hide@address.com>
*
* @param string $tag Nome del ramo di elementi XML da cercare
* @param string $xml Nome del file XML da processare
* @return array Array contenente gli attributi del tag con relative proprietĂ
*/
function get_array_attrib($tag, $xml)
{
// pattern che ottiene tra <tag e >
$diviso = eregi(".*<$tag([^>|^/>]+)(/>|>)", $xml, $reqs);
// prende solo la prima occorrenza
$attributi = trim($reqs[1]);
// pattern che ottiene un array con tutti i: PROP = "VAL"
$finale = preg_match_all("#([^=]+)=[\"|']([^\"|^']*)[\"|']#", $attributi, $arry);
// conta il numero di elementi
$ca = count($arry[1]);
// per ogni elemento trovato
for($i=0; $i<$ca; $i++)
{
// aggiunge all'array finale un array in coda formato da [PROP] => VAL
$array_finale[$arry[1][$i]] = $arry[2][$i];
}
// restituisce il valore
return $array_finale;
}
}
?>