Python XML Dosyası – Nasıl Okunur, Yazılır ve Ayrıştırılır

⚡ Akıllı Özet

Python XML işleme, yerleşik minidom ve ElementTree modüllerini kullanarak XML belgelerini okumanıza, yazmanıza ve ayrıştırmanıza olanak tanır. Minidom sınıfı bir dosyayı belleğe DOM olarak yüklerken, ElementTree daha hızlı ve daha verimli bir yöntem sunar. Pythonic tree API.

  • 🔘 XML nedir? Genişletilebilir İşaretleme Dili (eMML), küçük, yapılandırılmış verileri depolar ve iletir.
  • ☑️ minidom ayrıştırma: parse() fonksiyonu, bir XML dosyasını DOM olarak belleğe yükler.
  • ✅ Etiketleri okumak: getElementsByTagName() eşleşen öğeleri döndürür; getAttribute() ise değerlerini okur.
  • 🧪 Yazma düğümleri: `createElement()` ve `appendChild()` yöntemleri bir belgeye yeni bir etiket ekler.
  • ️ ElementTree API: ET.parse() bir ağaç yapısı oluşturur; getroot() ise kök öğeyi döndürür.
  • 🤖 Yapay zekâya hazır: Ayrıştırılan XML, yapılandırma ve API verilerini makine öğrenimi işlem hatlarına aktarır.

Python XML dosyası

Aşağıdaki bölümler XML dosyalarının ayrıştırılması, yazılması ve okunmasını kapsamaktadır. Python.

XML nedir?

XML, Genişletilebilir İşaretleme Dili anlamına gelir. Küçük ve orta miktarlardaki verileri depolamak ve taşımak için tasarlanmıştır ve yapılandırılmış bilgilerin paylaşımında yaygın olarak kullanılır.

Python XML belgelerini ayrıştırmanıza ve değiştirmenize olanak tanır. Bir XML belgesini ayrıştırmak için, tüm XML belgesinin bellekte olması gerekir. Bu eğitimde, XML minidom sınıfını nasıl kullanabileceğimizi göreceğiz. Python XML dosyalarını yüklemek ve ayrıştırmak için.

Minidom kullanarak XML Ayrıştırma nasıl yapılır

Ayrıştıracağımız örnek bir XML dosyası oluşturduk.

Adım 1) Örnek XML dosyası oluşturun

Dosyanın içinde adınızı, soyadınızı, evinizi ve uzmanlık alanınızı (SQL, Python(Test ve İşletme).

Minidom kullanarak XML Ayrıştırma nasıl yapılır

Adım 2) XML dosyasını yüklemek ve ayrıştırmak için ayrıştırma işlevini kullanın

Belgeyi ayrıştırmayı tamamladıktan sonra, belgenin kökünün "düğüm adını" ve "ilk alt öğe etiket adını" yazdıracağız. Etiket adı ve düğüm adı, XML dosyasının standart özellikleridir.

Minidom kullanarak XML'i ayrıştırma

  • xml.dom.minidom modülünü içe aktarın ve ayrıştırılacak dosyayı (myxml.xml) tanımlayın.
  • Bu dosya, bir çalışanın adı, soyadı, evi, uzmanlık alanı vb. gibi bazı temel bilgileri içerir.
  • XML dosyasını yüklemek ve ayrıştırmak için XML minidomundaki ayrıştırma işlevini kullanıyoruz
  • `doc` adında bir değişkenimiz var ve `doc`, `parse` fonksiyonunun sonucunu alıyor.
  • Dosyadan düğüm adını ve alt etiket adını yazdırmak istiyoruz, bu nedenle bunu yazdırma fonksiyonunda tanımlıyoruz.
  • Kodu çalıştırın - XML ​​dosyasından düğüm adını (#document) ve XML dosyasından ilk alt etiket adını (çalışan) yazdırır.

notNodename ve child tagname, XML DOM'un standart adları veya özellikleridir.

3. Adım) XML belgesinden XML etiketlerinin listesini çağırın ve yazdırın.

Ardından, XML belgesinden XML etiketlerinin listesini çağırıp yazdırabiliriz. Burada SQL gibi beceriler kümesini yazdırdık. Python, Test yapmak ve İşletme.

Minidom kullanarak XML'i ayrıştırma

  • Uzmanlık değişkenini tanımlayalım, bu değişkenden yola çıkarak incelemeler yapacağız.tracçalışanın sahip olduğu tüm uzmanlık alanlarının isimleri
  • “getElementsByTagName” adlı dom standart işlevini kullanın
  • Bu, beceri adı verilen tüm unsurları elde edecek
  • Beceri etiketlerinin her biri üzerinde bir döngü tanımlayın.
  • Kodu çalıştırın - Dört beceriden oluşan bir liste verecektir.

XML Düğümü Nasıl Yazılır

“createElement” fonksiyonunu kullanarak yeni bir nitelik oluşturabilir ve daha sonra bu yeni niteliği veya etiketi mevcut XML etiketlerine ekleyebiliriz. XML dosyamıza yeni bir “BigData” etiketi ekledik.

  1. Yeni özniteliği (BigData) mevcut XML etiketine eklemek için kod yazmanız gerekiyor.
  2. Ardından, mevcut XML etiketine yeni öznitelik eklenmiş XML etiketini yazdırmanız gerekiyor.

XML Düğümü Yaz

  • Yeni bir XML etiketi eklemek ve bunu belgeye dahil etmek için "doc.createElement" kodunu kullanırız.
  • Bu kod, yeni özelliğimiz olan "Büyük Veri" için yeni bir beceri etiketi oluşturacaktır.
  • Bu beceri etiketini belgenin ilk alt öğesine (çalışan) ekleyin.
  • Kodu çalıştırın; diğer uzmanlık alanlarının listesinin yanında "BigData" adlı yeni bir etiket görünecektir.

XML Ayrıştırıcı Örneği

Python 2 Örnek

import xml.dom.minidom

def main():
# use the parse() function to load and parse an XML file
   doc = xml.dom.minidom.parse("Myxml.xml");
  
# print out the document node and the name of the first child tag
   print doc.nodeName
   print doc.firstChild.tagName
  
# get a list of XML tags from the document and print each one
   expertise = doc.getElementsByTagName("expertise")
   print "%d expertise:" % expertise.length
   for skill in expertise:
     print skill.getAttribute("name")
    
#Write a new XML tag and add it into the document
   newexpertise = doc.createElement("expertise")
   newexpertise.setAttribute("name", "BigData")
   doc.firstChild.appendChild(newexpertise)
   print " "

   expertise = doc.getElementsByTagName("expertise")
   print "%d expertise:" % expertise.length
   for skill in expertise:
     print skill.getAttribute("name")
    
if name == "__main__":
  main();

Python 3 Örnek

import xml.dom.minidom

def main():
    # use the parse() function to load and parse an XML file
    doc = xml.dom.minidom.parse("Myxml.xml");

    # print out the document node and the name of the first child tag
    print (doc.nodeName)
    print (doc.firstChild.tagName)
    # get a list of XML tags from the document and print each one
    expertise = doc.getElementsByTagName("expertise")
    print ("%d expertise:" % expertise.length)
    for skill in expertise:
        print (skill.getAttribute("name"))

    # Write a new XML tag and add it into the document
    newexpertise = doc.createElement("expertise")
    newexpertise.setAttribute("name", "BigData")
    doc.firstChild.appendChild(newexpertise)
    print (" ")

    expertise = doc.getElementsByTagName("expertise")
    print ("%d expertise:" % expertise.length)
    for skill in expertise:
        print (skill.getAttribute("name"))

if __name__ == "__main__":
    main();

ElementTree kullanarak XML Ayrıştırma

ElementTree, XML dosyalarını işlemek için kullanılan bir API'dir. ElementTree, XML dosyalarını işlemenin kolay bir yoludur.

Örnek veri olarak aşağıdaki XML belgesini kullanıyoruz:

<data>
   <items>
      <item name="expertise1">SQL</item>
      <item name="expertise2">Python</item>
   </items>
</data>

ElementTree kullanarak XML okuma:

Öncelikle xml.etree.ElementTree modülünü içe aktarmamız gerekiyor.

import xml.etree.ElementTree as ET

Şimdi kök öğeyi alalım:

root = tree.getroot()

Yukarıdaki XML verilerini okumak için gereken kodun tamamı aşağıdadır:

import xml.etree.ElementTree as ET
tree = ET.parse('items.xml')
root = tree.getroot()

# all items data
print('Expertise Data:')

for elem in root:
   for subelem in elem:
      print(subelem.text)

Çıktı:

Expertise Data:
SQL
Python

SSS

DOM navigasyonu gerektiren küçük dosyalar için Minidom kullanın. Çoğu iş için ElementTree'yi seçin; daha hızlı, daha hafif ve önerilen bir araçtır. Pythonic varsayılan.

Kökü bir ElementTree içine alın ve tree.write(“out.xml”, encoding=”utf-8″, xml_declaration=True) yöntemini çağırın. Girinti için ET.indent() yöntemini kullanın. Python 3.9 ve üzeri sürümlerde veya lxml'nin pretty_print fonksiyonunda kullanılabilir.

lxml, ElementTree API'sini paylaşan ancak hızlı C koduyla desteklenen üçüncü taraf bir kütüphanedir. XPath, XSLT ve doğrulama özelliklerini ekler. pip install lxml komutuyla yükleyebilirsiniz.

Standart ayrıştırıcılar XXE ve milyarlarca kahkaha saldırılarına karşı savunmasızdır. defusedxml'i kurun ve tehlikeli harici varlıkları devre dışı bırakan, doğrudan kullanılabilen bir alternatif olan defusedxml.ElementTree'yi içe aktarın.

Evet. minidom.parseString(text) veya ElementTree'nin ET.fromstring(text) yöntemini kullanın; bu yöntem doğrudan kökü döndürür. Her ikisi de XML'i bir değişkenden ayrıştırır, bu nedenle yanıtların önceden kaydedilmesi gerekmez.

ElementTree ile ağaç yapısında gezinerek her öğenin etiketinden, özniteliklerinden ve metninden bir sözlük oluşturun. xmltodict kütüphanesi, xmltodict.parse() aracılığıyla dönüştürmeyi otomatikleştirir.

XML, modelleri besleyen yapılandırmaları, ek açıklamaları ve API yanıtlarını depolar. Pascal VOC görüntü etiketleri XML olarak gönderilir; ElementTree örneği de XML formatındadır.tracEğitim için sınırlayıcı kutularını kullanırlar.

Evet. GitHub Copilot, parse() ve findall() döngüleri gibi minidom ve ElementTree kalıplarını otomatik olarak tamamlar. Yine de etiket adlarını ve kodlamaları doğrulayın ve güvenilmeyen girdiler için defusedxml ekleyin.

Bu yazıyı şu şekilde özetleyin: