Fethi Polat 1
Fethi Polat
kralhakan2009 1
kralhakan2009
Vahsi Uzman 1
Vahsi Uzman
Best Studio 1
Best Studio
Agora Metin2 1
Agora Metin2
raderde 1
raderde
Cannn6161 1
Cannn6161
noisiv 1
noisiv
Manwe Work 1
Manwe Work
Mt2Hizmet 1
Mt2Hizmet
melankolıa18 1
melankolıa18
Hikaye Ekle
Reklam vermek için turkmmo@gmail.com

PHP - SAX Parser Örneği

Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...

Carissa

Administrator
Telefon Numarası Onaylanmış Üye TC Kimlik Numarası Doğrulanmış Üye Turkmmo Discord Nitro Booster
Admin
VIP Üye
Katılım
2 Mar 2015
Konular
59,189
Mesajlar
88,442
Çözüm
109
Online süresi
4mo 16d
Reaksiyon Skoru
14,280
Altın Konu
2,398
TM Yaşı
11 Yıl 3 Ay 7 Gün
Başarım Puanı
1,051
MmoLira
695,207
DevLira
234
Ticaret - 0%
0   0   0

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!

sax-parser-default-handler.jpg


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_parser_create(?string $encoding = null): XMLParser

Bu fonksiyon yeni bir XML ayrıştırıcısı oluşturur ve diğer XML fonksiyonları tarafından kullanılacak XMLParser nesnesini döndürür.

xml_parse() fonksiyonu bir XML belgesini ayrıştırmaya başlar.

xml_parse(XMLParser $parser, string $data, bool $is_final = false): int

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.

xml_set_element_handler(XMLParser $parser, callable $start_handler,
callable $end_handler): true

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.

xml_set_character_data_handler(XMLParser $parser, callable $handler): true

xml_set_processing_instruction_handler()

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.

xml_set_processing_instruction_handler(XMLParser $parser, callable $handler): true

Bir işleme talimatının biçimi aşağıdaki gibidir:

<?target
data
?>


xml_set_default_handler()

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.

xml_set_default_handler(XMLParser $parser, callable $handler): true

Örnek​

Aşağıdaki örnek, XML belgesini ayrıştırmak için SAX API'nin kullanımını göstermektedir. SAX.xml'i aşağıdaki gibi kullanacağız:

<?xml version = "1.0" encoding = "utf-8"?>
<tutors>
<course>
<name>Android</name>
<country>India</country>
<email>contact@tutorialspoint.com</email>
<phone>123456789</phone>
</course>

<course>
<name>Java</name>
<country>India</country>
<email>contact@tutorialspoint.com</email>
<phone>123456789</phone>
</course>

<course>
<name>HTML</name>
<country>India</country>
<email>contact@tutorialspoint.com</email>
<phone>123456789</phone>
</course>
</tutors>

Örnek

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
________________________________________
 

Bire bir çeviri, reddedildi.
 
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)

Geri
Üst