- 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
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_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
________________________________________
- Durum
- Üzgünüz bu konu cevaplar için kapatılmıştır...



