Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

📄 xml - XML İşlemleri

XML dosyalarını ayrıştırma, oluşturma ve düzenleme işlemleri

📦 55 Fonksiyon 📝 510 Satır 💾 14.5 KB

📋 Genel Bakış

xml modülü, XML (Extensible Markup Language) dosyalarını okuma, yazma, ayrıştırma ve düzenleme için kapsamlı araçlar sağlar. DOM ve SAX ayrıştırıcıları, XPath sorguları ve XML şema doğrulaması destekler.

🔍 XML Ayrıştırma

  • xml.ayrıştır() - XML metnini DOM ağacına dönüştürme
  • xml.dosyadan_ayrıştır() - XML dosyasını okuma
  • xml.sax_ayrıştır() - SAX tabanlı akış ayrıştırma
  • xml.doğrula() - XML şemasına göre doğrulama

📝 XML Oluşturma

  • xml.Belge() - Yeni XML belgesi oluşturma
  • xml.Element() - XML elementi oluşturma
  • xml.metin() - Metin düğümü ekleme
  • xml.yorum() - Yorum ekleme
  • xml.cdata() - CDATA bölümü ekleme

🔎 XPath Sorguları

  • xml.xpath() - XPath ifadesi çalıştırma
  • xml.bul() - İlk eşleşen elementi bulma
  • xml.bul_tümü() - Tüm eşleşen elementleri bulma
  • xml.öznitelik_al() - Element özniteliği alma

✏️ XML Düzenleme

  • xml.alt_ekle() - Alt element ekleme
  • xml.kaldır() - Element kaldırma
  • xml.öznitelik_ayarla() - Öznitelik ayarlama
  • xml.metin_ayarla() - Element metni değiştirme

💾 XML Serileştirme

  • xml.dizgeye() - XML'i string'e dönüştürme
  • xml.dosyaya_yaz() - XML dosyasına yazma
  • xml.güzel_yazdır() - Girintili XML çıktısı

💡 Kullanım Örnekleri

XML Ayrıştırma ve Okuma

kullan xml

// XML metnini ayrıştırma
değer xml_metin = """
<kitaplar>
    <kitap id="1">
        <başlık>BERK Programlama</başlık>
        <yazar>Ahmet Yılmaz</yazar>
        <fiyat>49.90</fiyat>
    </kitap>
    <kitap id="2">
        <başlık>Web Geliştirme</başlık>
        <yazar>Ayşe Demir</yazar>
        <fiyat>59.90</fiyat>
    </kitap>
</kitaplar>
"""

değer belge = xml.ayrıştır(xml_metin)

// XPath ile sorgulama
değer kitaplar = belge.xpath("//kitap")
için kitap içinde kitaplar {
    değer başlık = kitap.bul("başlık").metin
    değer yazar = kitap.bul("yazar").metin
    değer fiyat = kitap.bul("fiyat").metin
    değer id = kitap.öznitelik_al("id")
    
    yazdır(f"Kitap #{id}: {başlık} - {yazar} ({fiyat} TL)")
}

// Çıktı:
// Kitap #1: BERK Programlama - Ahmet Yılmaz (49.90 TL)
// Kitap #2: Web Geliştirme - Ayşe Demir (59.90 TL)

XML Oluşturma

kullan xml

// Yeni XML belgesi oluşturma
değer belge = xml.Belge("1.0", "UTF-8")
değer kök = belge.kök_element_oluştur("katalog")

// Ürünler ekleme
değer ürünler = [
    {"id": "P001", "ad": "Laptop", "fiyat": 5500, "stok": 15},
    {"id": "P002", "ad": "Mouse", "fiyat": 75, "stok": 120},
    {"id": "P003", "ad": "Klavye", "fiyat": 250, "stok": 45}
]

için ürün içinde ürünler {
    değer elem = xml.Element("ürün")
    elem.öznitelik_ayarla("id", ürün["id"])
    elem.öznitelik_ayarla("stok", ürün["stok"].dizgeye())
    
    değer ad = xml.Element("ad")
    ad.metin_ayarla(ürün["ad"])
    elem.alt_ekle(ad)
    
    değer fiyat = xml.Element("fiyat")
    fiyat.metin_ayarla(ürün["fiyat"].dizgeye())
    fiyat.öznitelik_ayarla("para_birimi", "TRY")
    elem.alt_ekle(fiyat)
    
    kök.alt_ekle(elem)
}

// XML'i dosyaya kaydetme
xml.dosyaya_yaz(belge, "katalog.xml", girintili: doğru)
yazdır("XML belgesi oluşturuldu!")

Yapılandırma Dosyası Yöneticisi

kullan xml
kullan fs

sınıf YapılandırmaYöneticisi {
    değer dosya_yolu: Dize
    değer belge: xml.Belge
    
    fonksiyon yeni(dosya_yolu: Dize) -> YapılandırmaYöneticisi {
        değer örnek = YapılandırmaYöneticisi {
            dosya_yolu: dosya_yolu,
            belge: boş
        }
        
        eğer fs.dosya_var_mı(dosya_yolu) {
            örnek.belge = xml.dosyadan_ayrıştır(dosya_yolu)
        } yoksa {
            örnek.belge = xml.Belge("1.0", "UTF-8")
            örnek.belge.kök_element_oluştur("yapılandırma")
        }
        
        dön örnek
    }
    
    fonksiyon ayar_al(bölüm: Dize, anahtar: Dize) -> Sonuç<Dize, Hata> {
        değer xpath = f"//bölüm[@ad='{bölüm}']/{anahtar}"
        değer bulunan = bu.belge.xpath(xpath)
        
        eğer bulunan.uzunluk > 0 {
            dön Tamam(bulunan[0].metin)
        }
        dön Hata(f"Ayar bulunamadı: {bölüm}.{anahtar}")
    }
    
    fonksiyon ayar_ata(bölüm: Dize, anahtar: Dize, değer: Dize) {
        değer kök = bu.belge.kök()
        değer bölüm_xpath = f"//bölüm[@ad='{bölüm}']"
        değer bölüm_elem = kök.xpath(bölüm_xpath)
        
        eğer bölüm_elem.uzunluk == 0 {
            bölüm_elem = xml.Element("bölüm")
            bölüm_elem.öznitelik_ayarla("ad", bölüm)
            kök.alt_ekle(bölüm_elem)
        } yoksa {
            bölüm_elem = bölüm_elem[0]
        }
        
        değer ayar_elem = xml.Element(anahtar)
        ayar_elem.metin_ayarla(değer)
        bölüm_elem.alt_ekle(ayar_elem)
    }
    
    fonksiyon kaydet() {
        xml.dosyaya_yaz(bu.belge, bu.dosya_yolu, girintili: doğru)
    }
}

// Kullanım
değer yapılandırma = YapılandırmaYöneticisi.yeni("uygulama.xml")

yapılandırma.ayar_ata("veritabanı", "sunucu", "localhost")
yapılandırma.ayar_ata("veritabanı", "port", "5432")
yapılandırma.ayar_ata("uygulama", "dil", "tr")
yapılandırma.ayar_ata("uygulama", "tema", "koyu")

yapılandırma.kaydet()

// Ayarları okuma
değer sunucu = yapılandırma.ayar_al("veritabanı", "sunucu").aç()
değer dil = yapılandırma.ayar_al("uygulama", "dil").aç()
yazdır(f"Sunucu: {sunucu}, Dil: {dil}")

🎯 İyi Uygulamalar

  • Büyük XML dosyaları için SAX ayrıştırıcısını kullanın
  • XML şemaları ile doğrulama yapın
  • XPath sorgularını önbellekte tutun
  • Namespace'leri doğru yönetin
  • XML injection saldırılarına karşı girdi doğrulama yapın
  • Güzel yazdırma (pretty print) ile okunabilirliği artırın

🔗 İlgili Modüller

  • json - JSON veri formatı
  • yaml - YAML veri formatı
  • fs - Dosya sistemi işlemleri
  • encoding - Kodlama dönüşümleri