26.08.2004
|
#1 (permalink)
|
Üyelik Tarihi: 27.11.2003
Yer: izmir
Yaş: 25
Mesaj: 20
|
PHP 4 ve XML
Merhaba arkadaşlar,
Evet sorun PHP ve XML. Şimdi PHP 5 de olay oldukça rahat. Zira .NET benzeri API ler ile olay oldukça basitleştirilmiş. Ama gel gelelim PHP 4 e burda işler biraz karışık. Ve zahmetli. Ben internette incelediğim diğer class ve fonksiyonları değerlendirip kendimce bir class yazdım. Evet güzel hızlı ve hoş çalışıyor. Fakat bu seferde Türkçe karakter sorunu oluştu. Konuya hâkim arkadaşlar bir incelerlerse çok sevinirim.
<?PHP
class XMLGet {
var $GetByTagName, $GetByTagAttr = array(), $XMLDocument;
var $Record = array(), $XMLParser;
var $ErrMSG, $LineNumber, $Getname;
function XMLGet() {
$arrClassVars = get_class_vars(get_class($this));
$blnReturn = false;
$strParserVarName = "XMLParser";
if($arrClassVars[$strParserVarName] != "") {
$blnReturn = true;
} else {
$this->XMLParser = xml_parser_create();
xml_set_object($this->XMLParser, &$this);
xml_set_element_handler($this->XMLParser, "startElement", "endElement");
xml_set_character_data_handler($this->XMLParser, "characterData");
$blnReturn = true;
}
xml_parser_set_option($this->XMLParser, XML_OPTION_CASE_FOLDING, true);
xml_parser_set_option($this->XMLParser,XML_OPTION_TARGET_ENCODING,"utf-8");
}
function CWS_XMLGet($XMLDoc, $TagName, $Attrb=false) {
if (!$XMLDoc) {
$this->ErrorMSG("Kaynak XML dokümani belirtilmemis");
return false;
exit;
}
if (!$TagName) {
$this->ErrorMSG("Etiket belirtilmemis");
return false;
exit;
}
$this->XMLDocument = trim($XMLDoc);
$this->GetByTagName = explode(',',trim(strtoupper($TagName)));
$this->GetByTagAttr = explode(',',trim(strtoupper($Attrb)));
$this->Record = array();
$this->ParsingXML();
}
function startElement($XMLParser, $name, $attrs) {
$this->Getname = $name;
$this->LineNumber = count($this->Record);
if (sizeof($attrs)) {
foreach ($attrs as $Attkey => $Attval) {
if (in_array($Attkey,$this->GetByTagAttr) && in_array($this->Getname,$this->GetByTagName)) {
$this->Record[$this->LineNumber][$name][$Attkey] = $attrs[$Attkey];
}
}
}
}
function endElement($XMLParser, $name) {
}
function characterData($XMLParser, $data) {
if (in_array($this->Getname,$this->GetByTagName) && !$this->Record[$this->LineNumber][$this->Getname]['--DATA--']) {
$this->Record[$this->LineNumber][$this->Getname]['--DATA--'] = $data;
}
}
function ParsingXML() {
$fp = @fopen($this->XMLDocument, "rb") or $this->ErrorMSG("XML dokümanı ile bağlantı kurulamadı <STRONG>Satir: 1</STRONG>");
while ($data = fread($fp, 4096)) {
if (!xml_parse($this->XMLParser, $data, feof($fp))) {
$this->ErrorMSG(sprintf("%s <STRONG>Satir: %d</STRONG>",
xml_error_string(xml_get_error_code($this->XMLParser)),
xml_get_current_line_number($this->XMLParser) ));
}
}
xml_parser_free($this->XMLParser);
fclose($fp);
}
function CloseXML() {
unset($this->XMLDocument);
unset($this->GetByTagName);
unset($this->GetByTagAttr);
unset($this->OutPutName);
unset($this->Record);
unset($this->LineNumber);
unset($this->Getname);
}
function ErrorMSG($err) {
$MsgErr.= "<STRONG>XML Hatasi :</STRONG><P>".$err."<P><A HREF=\"JavaScript:history.go(-1);\">< Geri</A>";
print f_PrintMSG(true,$MsgErr,true);
exit;
}
}
?>
Class bu şekilde. XML dosyasını okuyup attribute lerle ve taglarla beraber bir array olarak çıktı veriyor.
Örneğin TRT den döviz bilgilerini almak için:
$MoneyXML = "http://www.trt.net.tr/aspx/pararead.aspx?param=doviz";
$XML = new XMLGet;
$XML->CWS_XMLGet($MoneyXML, "DO","DA,DS");
$OutPutHTML.= "<TABLE WIDTH=\"165\" BORDER=\"0\" CELLPADDING=\"1\" CELLSPACING=\"1\" CLASS=\"bordered\">\n";
$OutPutHTML.= "<TR> \n";
$OutPutHTML.= "<TD BGCOLOR=\"#EEF8E0\" CLASS=\"smalls\"><STRONG>Döviz</STRONG></TD>\n";
$OutPutHTML.= "</TR>\n";
$OutPutHTML.= "<TR>\n";
$OutPutHTML.= "<TD CLASS=\"smalls\"><IMG SRC=\"gfx/soft_gray.gif\" WIDTH=\"100%\" HEIGHT=\"1\"></TD>\n";
$OutPutHTML.= "</TR>\n";
$OutPutHTML.= "<TR> \n";
$OutPutHTML.= "<TD BGCOLOR=\"#F3F3F3\" CLASS=\"smalls\">USD Dolar ($)</TD>\n";
$OutPutHTML.= "</TR>\n";
$OutPutHTML.= "<TR> \n";
$OutPutHTML.= "<TD CLASS=\"smalls\"><TABLE WIDTH=\"100%\" BORDER=\"0\" CELLPADDING=\"1\" CELLSPACING=\"1\" CLASS=\"smalls\">\n";
$OutPutHTML.= "<TR>\n";
$OutPutHTML.= "<TD WIDTH=\"40\">Alış :</TD>\n";
$OutPutHTML.= "<TD>".$XML2->Record[0]['DO']['DA']."</TD>\n";
$OutPutHTML.= "</TR>\n";
$OutPutHTML.= "<TR>\n";
$OutPutHTML.= "<TD>Satış :</TD>\n";
$OutPutHTML.= "<TD>".$XML2->Record[0]['DO']['DS']."</TD>\n";
$OutPutHTML.= "</TR>\n";
$OutPutHTML.= "</TABLE></TD>\n";
$OutPutHTML.= "</TR>\n";
$OutPutHTML.= "<TR> \n";
$OutPutHTML.= "<TD CLASS=\"smalls\"><IMG SRC=\"gfx/soft_gray.gif\" WIDTH=\"100%\" HEIGHT=\"1\"></TD>\n";
$OutPutHTML.= "</TR>\n";
$OutPutHTML.= "<TR> \n";
$OutPutHTML.= "<TD BGCOLOR=\"#F3F3F3\" CLASS=\"smalls\">EURO (€)</TD>\n";
$OutPutHTML.= "</TR>\n";
$OutPutHTML.= "<TR> \n";
$OutPutHTML.= "<TD CLASS=\"smalls\"><TABLE WIDTH=\"100%\" BORDER=\"0\" CELLPADDING=\"1\" CELLSPACING=\"1\" CLASS=\"smalls\">\n";
$OutPutHTML.= "<TR> \n";
$OutPutHTML.= "<TD WIDTH=\"40\">Alış :</TD>\n";
$OutPutHTML.= "<TD>".$XML2->Record[11]['DO']['DA']."</TD>\n";
$OutPutHTML.= "</TR>\n";
$OutPutHTML.= "<TR> \n";
$OutPutHTML.= "<TD>Satış :</TD>\n";
$OutPutHTML.= "<TD>".$XML2->Record[11]['DO']['DA']."</TD>\n";
$OutPutHTML.= "</TR>\n";
$OutPutHTML.= "</TABLE></TD>\n";
$OutPutHTML.= "</TR>\n";
$OutPutHTML.= "</TABLE><BR>\n";
$XML2->CloseXML();
print $OutPutHTML;
herkese iyi çalışmalar.
|
|
|