Son Güncelleme: 25 Mar, 2025

XML (Genişletilebilir İşaretleme Dili), veri depolama, yapılandırma dosyaları ve web hizmetleri için yaygın olarak kullanılır. Yapılandırılmış verilerle çalışan geliştiriciler için XML’i verimli şekilde ayrıştırmak önemlidir. Bu yazıda, Python, Java ve JavaScript için en iyi XML ayrıştırıcılarını ve her dil için örnekleri inceleyeceğiz.
1. Python’da XML Ayrıştırma
Python, farklı kullanım durumlarına uygun çeşitli XML dosyası ayrıştırma kütüphaneleri sunar.
1.1 xml.etree.ElementTree
(Yerleşik Kütüphane)
xml.etree.ElementTree
, XML ayrıştırma için basit ve etkili bir yerleşik modüldür.
Örnek: Bir XML Dosyasını Ayrıştırma
import xml.etree.ElementTree as ET | |
xml_data = """ | |
<data> | |
<item> | |
<name>Book</name> | |
<price>10.99</price> | |
</item> | |
</data> | |
""" | |
root = ET.fromstring(xml_data) | |
for item in root.findall('item'): | |
name = item.find('name').text | |
price = item.find('price').text | |
print(f"Item: {name}, Price: {price}") |
- Artıları: Hafif ve kullanımı kolay.
- Eksileri: Karmaşık XML yapıları için sınırlı.
1.2 lxml
(Hızlı & Özellik Zengini)
lxml
, libxml2 C kütüphanesine dayanan güçlü bir kütüphanedir, hız ve XPath desteği sunar.
Örnek: lxml
ile Ayrıştırma
from lxml import etree | |
xml_data = "<root><element key='value'>Text</element></root>" | |
tree = etree.fromstring(xml_data) | |
print(tree.xpath('//element/@key')) # Output: ['value'] |
- Artıları:
ElementTree
‘den daha hızlı, XPath desteği. - Eksileri: Kurulum gerektirir (
pip install lxml
).
1.3 BeautifulSoup
(Web Kazıma İçin En İyisi)
BeautifulSoup
, HTML ayrıştırma için esas olarak kullanılır, ancak XML’i de destekler.
Örnek: BeautifulSoup
ile XML Ayrıştırma
from bs4 import BeautifulSoup | |
xml_data = "<root><item>Data</item></root>" | |
soup = BeautifulSoup(xml_data, "xml") | |
print(soup.item.text) # Output: Data |
- Artıları: Kullanımı kolay, web kazıma için harika.
- Eksileri:
lxml
‘den daha yavaş.
2. Java’da XML Ayrıştırma
Java, DOM, SAX ve StAX ayrıştırıcılar gibi sağlam XML ayrıştırma seçenekleri sunar.
2.1 DOM Ayrıştırıcı (Tüm XML’i Belleğe Yükler)
DOM ayrıştırıcı, tüm XML ağacını belleğe yükleyerek gezinmeyi kolaylaştırır ancak büyük dosyalar için verimsizdir.
Örnek: DOM ile XML Ayrıştırma
import javax.xml.parsers.*; | |
import org.w3c.dom.*; | |
import java.io.*; | |
public class XMLParser { | |
public static void main(String[] args) throws Exception { | |
File file = new File("data.xml"); | |
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); | |
DocumentBuilder builder = factory.newDocumentBuilder(); | |
Document doc = builder.parse(file); | |
NodeList items = doc.getElementsByTagName("item"); | |
for (int i = 0; i < items.getLength(); i++) { | |
Element item = (Element) items.item(i); | |
System.out.println("Item: " + item.getTextContent()); | |
} | |
} | |
} |
- Artıları: Basit, küçük XML dosyalar için uygun.
- Eksileri: Yüksek bellek kullanımı.
2.2 SAX Ayrıştırıcı (Olay Tabanlı & Bellek Tasarrufludur)
SAX ayrıştırıcı, XML’i sırayla okur, bu da onu büyük dosyalar için uygun hale getirir.
Örnek: SAX ile XML Ayrıştırma
import javax.xml.parsers.SAXParser; | |
import javax.xml.parsers.SAXParserFactory; | |
import org.xml.sax.*; | |
import org.xml.sax.helpers.DefaultHandler; | |
import java.io.*; | |
class SAXHandler extends DefaultHandler { | |
public void startElement(String uri, String localName, String qName, Attributes attributes) { | |
System.out.println("Element: " + qName); | |
} | |
} | |
public class SAXExample { | |
public static void main(String[] args) throws Exception { | |
SAXParserFactory factory = SAXParserFactory.newInstance(); | |
SAXParser saxParser = factory.newSAXParser(); | |
saxParser.parse(new File("data.xml"), new SAXHandler()); | |
} | |
} |
- Artıları: Daha hızlı ve düşük bellek kullanımı.
- Eksileri: DOM’a kıyasla gezinmesi daha zor.
3. JavaScript’te XML Ayrıştırma
JavaScript, Python veya Java gibi yerleşik bir XML ayrıştırıcıya sahip değildir, ancak DOMParser ve XMLHttpRequest
sunar.
3.1 DOMParser
Kullanımı (İstemci Tarafı Ayrıştırma)
DOMParser
, XML dizilerini kolay manipülasyon için DOM nesnelerine dönüştürür.
Örnek: DOMParser
ile XML Ayrıştırma
- Artıları: Tarayıcı tabanlı XML ayrıştırma için kullanımı kolay.
- Eksileri: İstemci tarafı JavaScript ile sınırlı.
3.2 Sunucudan XML Alma
Örnek: fetch()
Kullanarak XML Yükleme
fetch('data.xml') | |
.then(response => response.text()) | |
.then(str => new window.DOMParser().parseFromString(str, "text/xml")) | |
.then(xml => console.log(xml.getElementsByTagName("item")[0].textContent)); |
- Artıları: Dinamik XML içeriği için çalışır.
- Eksileri: Sunucu gerektirir.
Sonuç: Doğru XML Ayrıştırıcıyı Seçme
Dil | En İyi Ayrıştırıcı | Kullanım Durumu |
---|---|---|
Python | ElementTree | Basit XML ayrıştırma |
Python | lxml | Hızlı, XPath desteği ile |
Java | DOM Ayrıştırıcı | Küçük XML dosyaları |
Java | SAX Ayrıştırıcı | Büyük XML dosyaları |
JavaScript | DOMParser | Tarayıcı tabanlı XML işleme |
Her ayrıştırıcı, kullanım durumunuza bağlı olarak kendi avantajlarını sunar. Eğer küçük XML dosyaları ile çalışıyorsanız, ElementTree
veya DOM harikadır. Büyük dosyalar için SAX veya lxml kullanın. JavaScript’te, DOMParser
tarayıcılarda XML işleme için en iyi seçimdir.