ROHAN2 WORLD 1-120 TR TİPİ OFFICIAL YOHARA, BALATHOR VE AMON! 80. GÜNÜNDE! +10.000 ONLİNE! HİLE VE BOT %100 ENGELLİ HEMEN TIKLA!
PHP, php.ini ayar dosyasında varsayılan olarak XML ayrıştırıcı uzantısını etkinleştirmiştir. Bu ayrıştırıcı, olay tabanlı bir ayrıştırma algoritması olan SAX API'yi uygular.
Olay tabanlı bir ayrıştırıcı, tüm XML belgesini belleğe yüklemez. Bunun yerine, bir seferde bir düğüm okur. Ayrıştırıcı, gerçek zamanlı olarak etkileşim kurmanıza olanak tanır. Bir sonraki düğüme geçtiğinizde, eskisi bellekten kaldırılır.
SAX tabanlı ayrıştırma mekanizması ağaç tabanlı ayrıştırıcılardan daha hızlıdır. PHP kütüphanesi bu bölümde açıklandığı gibi XML olaylarını işlemek için işlevler içerir.
Bir XML belgesini ayrıştırmanın ilk adımı, xml_parse_create() fonksiyonuna sahip bir ayrıştırıcı nesnesine sahip olmaktır
xml_parse() bir XML belgesini ayrıştırır. Yapılandırılmış olaylar için işleyiciler gerektiği kadar çok çağrılır.
XMLParser eklentisi farklı olay işleyici işlevleri sağlar.
xml_set_element_işleyicisi()
Bu işlev, XML ayrıştırıcısı için öğe işleyici işlevlerini ayarlar. Öğe olayları, XML ayrıştırıcısı başlangıç veya bitiş etiketleriyle karşılaştığında yayınlanır. Başlangıç etiketleri ve bitiş etiketleri için ayrı işleyiciler vardır.
Yeni bir XML elemanı açıldığında start_handler() fonksiyonu çağrılır. XML elemanı kapatıldığında end_handler() fonksiyonu çağrılır.
xml_set_character_data_handler()
Bu fonksiyon, XML ayrıştırıcısı ayrıştırıcısı için karakter veri işleyicisi fonksiyonunu ayarlar. Karakter verisi, etiketler arasındaki boşluklar da dahil olmak üzere, XML belgelerinin işaretleme dışındaki tüm içerikleridir.
Bu fonksiyon, XML ayrıştırıcısı ayrıştırıcısı için işleme talimatı (PI) işleyici fonksiyonunu ayarlar. <?php ?> bir işleme talimatıdır, burada php "PI hedefi" olarak adlandırılır. Bunların işlenmesi uygulamaya özgüdür.
Bu fonksiyon, XML ayrıştırıcısı ayrıştırıcısı için işleme talimatı (PI) işleyici fonksiyonunu ayarlar. <?php ?> bir işleme talimatıdır, burada php "PI hedefi" olarak adlandırılır. Bunların işlenmesi uygulamaya özgüdür.
Bu fonksiyon XML ayrıştırıcısı ayrıştırıcısı için varsayılan işleyici fonksiyonunu ayarlar. Başka bir işleyiciye gitmeyenler varsayılan işleyiciye gider. Varsayılan işleyicide XML ve belge türü bildirimleri gibi şeyler elde edersiniz.
Yukarıdaki belgeyi ayrıştırmak için PHP kodu aşağıda verilmiştir. XML dosyasını açar ve dosya sonuna ulaşılana kadar xml_parse() fonksiyonunu çağırır. Olay işleyicileri verileri tutors dizisinde depolar. Sonra dizi eleman bazında yankılanır.
PHP:
<?php
// Reading XML using the SAX(Simple API for XML) parser
$tutors = array();
$elements = null;
// Called to this function when tags are opened
function startElements($parser, $name, $attrs) {
global $tutors, $elements;
if(!empty($name)) {
if ($name == 'COURSE') {
// creating an array to store information
$tutors []= array();
}
$elements = $name;
}
}
// Called to this function when tags are closed
function endElements($parser, $name) {
global $elements;
if(!empty($name)) {
$elements = null;
}
}
// Called on the text between the start and end of the tags
function characterData($parser, $data) {
global $tutors, $elements;
if(!empty($data)) {
if ($elements == 'NAME' || $elements == 'COUNTRY' || $elements == 'EMAIL' || $elements == 'PHONE') {
$tutors[count($tutors)-1][$elements] = trim($data);
}
}
}
$parser = xml_parser_create();
xml_set_element_handler($parser, "startElements", "endElements");
xml_set_character_data_handler($parser, "characterData");
// open xml file
if (!($handle = fopen('sax.xml', "r"))) {
die("could not open XML input");
}
while($data = fread($handle, 4096)) {
xml_parse($parser, $data);
}
xml_parser_free($parser);
$i = 1;
foreach($tutors as $course) {
echo "course No - ".$i. '<br/>';
echo "course Name - ".$course['NAME'].'<br/>';
echo "Country - ".$course['COUNTRY'].'<br/>';
echo "Email - ".$course['EMAIL'].'<br/>';
echo "Phone - ".$course['PHONE'].'<hr/>';
$i++;
}
?>
Yukarıdaki kod aşağıdaki çıktıyı verir:
course No - 1
course Name - Android
Country - India
Email - contact@tutorialspoint.com
Phone - 123456789
________________________________________
course No - 2
course Name - Java
Country - India
Email - contact@tutorialspoint.com
Phone - 123456789
________________________________________
course No - 3
course Name - HTML
Country - India
Email - contact@tutorialspoint.com
Phone - 123456789
________________________________________