Python’da XML nasıl ayrıştırılır ve belirli bir düğüm için öznitelikler nasıl alınır?

Xml içeren bir veritabanımız olsun.

Xml içeren bir veritabanımız olsun. Bu veritabanında birçok satır bulunsun ve biz belirli bir düğüm özniteliğinin değerlerini almak isteyelim. Bunu Python ile nasıl yaparız?

XML ağacımız şöyle görünsün:

<foo>
   <bar>
      <type foobar="1"/>
      <type foobar="2"/>
   </bar>
</foo>

Python kullanarak "1" ve "2" özniteliklerine nasıl erişeceğiz?


Bunun için ElementTree'yi kullanabiliriz. Lxml veya cElementTree gibi aynı APIyi kullanan ve Python standart kitaplığında bulunan başka uygulamalar da olsa da; bu yapıların esas olarak ekledikleri en fazla şey daha da fazla hızdır – programlama kısmının kolaylığı, tanımlayan API’ye yani ElementTree‘ye bağlıdır.

Önce XML’den bir root öğesi oluşturun. Bunun için XML işlevini kullanabilirsiniz veya aşağıdaki gibi bir dosya oluşturucusu:

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

Sonrasında şöyle yapacağız:

for type_tag in root.findall('bar/type'):
    value = type_tag.get('foobar')
    print(value)

minidom ile XML okuma

Bunu minidom ile yapmak isteseydik aşağıdaki gibi bir örneğimiz olacaktı:

XML:

<data>
    <items>
        <item name="item1"></item>
        <item name="item2"></item>
        <item name="item3"></item>
        <item name="item4"></item>
    </items>
</data>

Python:

from xml.dom import minidom
xmldoc = minidom.parse('items.xml')
itemlist = xmldoc.getElementsByTagName('item')
print(len(itemlist))
print(itemlist[0].attributes['name'].value)
for s in itemlist:
    print(s.attributes['name'].value)

Çıktı:

4
item1
item1
item2
item3
item4

BeautifulSoap ile XML okuma

Peki BeautifulSoup kullansaydık?

from bs4 import BeautifulSoup

x="""<foo>
   <bar>
      <type foobar="1"/>
      <type foobar="2"/>
   </bar>
</foo>"""

y=BeautifulSoup(x)
>>> y.foo.bar.type["foobar"]
u'1'

>>> y.foo.bar.findAll("type")
[<type foobar="1"></type>, <type foobar="2"></type>]

>>> y.foo.bar.findAll("type")[0]["foobar"]
u'1'
>>> y.foo.bar.findAll("type")[1]["foobar"]
u'2'
Bu yazı topluluk tarafından oluşturuldu. Lisans bilgisine bakabilirsiniz. Yanlış veya eksik bilgileri düzenlemek için github üzerinden katkıda bulunabilirsiniz.

Kategoriler: Yazı, Python

Okumaya devam et!

Python101 – Nesne Yönelimli Programlama

Nesne Yönelimli Programlama Şimdiye kadar yaptığınız programlama prosedüreldi.

Python Tarih ve Zaman

Python, tarih ve saatlerin oluşturulması, değiştirilmesi, ayrıştırılması ve manipüle edilmesi için hem yerleşik yöntemler hem de harici kütüphaneler sağlar.

Python Koşul İfadeleri – if Kullanımı

Python’da koşul ifadeleri yazmaya if, elif veya else gibi anahtar kelimeleri kullanarak başlarız.

Temel Matematik Operatörleri

Python, tamsayı ve float bölme, çarpma, üs alma, toplama ve çıkarma dahil olmak üzere yaygın matematiksel işlemlerini başka bir modüle ihtiyaç duymadan yapabilir.

Yorum Gönderin

E-posta hesabınız yayımlanmayacak.

koddla
Tema Mundana by WowThemes.net.