📄 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