Uygulama

Linux’ta bir XML dosyasını ayrıştırmanın 5 basit yolu

XML (Genişletilebilir İşaretleme Dili), farklı sistemler arasında yapılandırılmış bilgi alışverişi için yaygın olarak kullanılan bir veri biçimidir. Kolay okunabilir ve platformdan bağımsızdır, bu da onu çeşitli uygulamalar için ideal kılar. Linux’ta XML dosyalarını ayrıştırmanın birçok yolu vardır ve bu makalede beş basit tekniği tartışacağız. Ayrıştırmanın neden gerekli olduğunu, avantajlarını ve genel sorun giderme ipuçlarını da inceleyeceğiz.

XML Dosyalarını neden ayrıştırmalıyım?

Bir XML dosyasının ayrıştırılması, içeriğinin okunmasını ve ağaç gibi kolayca değiştirilebilen veya sorgulanabilen yapılandırılmış bir veri formatına dönüştürülmesini içerir. Ayrıştırma çeşitli nedenlerle önemlidir:

  • XML dosyasından belirli bilgileri çıkarmak için.
  • Verileri HTML veya JSON gibi farklı bir biçime dönüştürmek için.
  • XML dosyasını bir şemaya veya DTD’ye (Belge Türü Tanımı) göre doğrulamak için.
  • Dosya içindeki belirli öğeleri veya nitelikleri aramak için.

XML dosyalarını ayrıştırmanın avantajları

XML dosyalarını ayrıştırmanın avantajlarından bazıları şunlardır:

Taşınabilirlik: XML dosyaları, çeşitli programlama dilleri ve araçları tarafından ayrıştırılabilir ve oluşturulabilir, bu da onları çok yönlü bir veri alışverişi biçimi haline getirir.
Okunabilirlik: XML, geliştiricilerin yapısını kolayca okumasına ve anlamasına olanak tanıyan bir düz metin biçimidir.
Standartlaştırılmış: XML, farklı sistemler ve uygulamalar arasında birlikte çalışabilirliğe yardımcı olan köklü bir standarttır.
Ölçeklenebilirlik: XML, büyük miktarda hiyerarşik veriyi verimli bir şekilde temsil edebilir ve bu da onu büyük ölçekli uygulamalar için uygun hale getirir.

Linux’ta bir XML dosyasını ayrıştırmanın 5 basit yolu

1. XMLStarlet

XMLStarlet, XML belgelerini işlemek için bir komut satırı yardımcı programıdır. XML dosyalarının seçimi, dönüştürülmesi, doğrulanması ve düzenlenmesi gibi işlevler sunan zengin özelliklere sahiptir. XMLStarlet’i kurmak için:

sudo apt-get install xmlstarlet

Bir XML dosyasını ayrıştırmak ve belirli öğeleri ayıklamak için “sel” komutunu kullanın:

xmlstarlet sel -t -v "//element_name" input.xml

İşte komut bileşenlerinin dökümü:

  • xmlstarlet: Bu, XML dosyalarını işlemek için komut satırı yardımcı programıdır.
  • sel: Bu alt komut “seç” anlamına gelir ve bir XML dosyasından veri sorgulamak için kullanılır.
  • -t: Bu seçenek, XML dosyasını işlemek için bir dizi işlem belirtmenize izin veren bir şablon modunu belirtir.
  • -v: Bu seçenek, “değerinin” kısaltmasıdır ve eşleşen XML öğelerinin metin içeriğini çıkarmak için kullanılır.
  • “//element_name”: Bu, belge hiyerarşisindeki konumlarından bağımsız olarak, XML dosyasındaki “element_name” öğelerinin tüm örneklerini seçen bir XPath ifadesidir. Çift eğik çizgi (//), öğe_adı için yinelemeli bir aramayı temsil ederken, “öğe_adı”, çıkartmak istediğiniz XML öğesinin gerçek adıyla değiştirilmelidir.
  • input.xml: Bu, verileri ayrıştırmak ve ayıklamak istediğiniz girdi XML dosyasıdır. “input.xml” ifadesini gerçek dosya adı veya XML dosyasının yolu ile değiştirin.

Pratik örnek: Aşağıdaki XML dosyasını (sample.xml) inceleyin

<fruits>
<fruit>
<name>Apple</name>
<color>Red</color>
</fruit>
<fruit>
<name>Banana</name>
<color>Yellow</color>
</fruit>
</fruits>

Tüm meyvelerin adlarını çıkarmak istiyorsanız, aşağıdaki komutu kullanabilirsiniz:

xmlstarlet sel -t -v "//name" sample.xml

Komutun çıktısı:

Apple
Banana

XMLStarlet ‘sel’ komutu, XML dosyalarından veri sorgulamak ve ayıklamak için güçlü bir araçtır. Öğeleri niteliklerine, konumlarına veya diğer koşullara göre seçmek için XPath ifadelerinizi daha da hassaslaştırabilirsiniz.

2. xmllint

xmllint, libxml2 kitaplığı tarafından sağlanan bir komut satırı yardımcı programıdır. XML dosyalarını ayrıştırabilir, doğrulayabilir ve biçimlendirebilir. xmllint’i yüklemek için:

sudo apt-get install libxml2-utils

Bir XML dosyasını ayrıştırmak ve belirli öğeleri almak için “–xpath” seçeneğini kullanın:

xmllint --xpath "//element_name" input.xml

–xpath seçeneği, XPath ifadelerini kullanarak bir XML dosyasından veri sorgulamanıza ve ayıklamanıza olanak tanır. İşte komutun dökümü:

  • xmllint: Bu, libxml2 kitaplığından XML dosyalarını işlemek için kullanılan komut satırı yardımcı programıdır.
  • –xpath: Bu seçenek, bir XPath ifadesini giriş XML dosyasına göre değerlendirmek ve eşleşen düğümleri çıkarmak için kullanılır.
  • “//element_name”: Bu, belge hiyerarşisindeki konumlarından bağımsız olarak, XML dosyasındaki “element_name” öğelerinin tüm örneklerini seçen bir XPath ifadesidir. Çift eğik çizgi (//), öğe_adı için yinelemeli bir aramayı temsil ederken, “öğe_adı”, çıkartmak istediğiniz XML öğesinin gerçek adıyla değiştirilmelidir.
  • input.xml: Bu, verileri ayrıştırmak ve ayıklamak istediğiniz girdi XML dosyasıdır. “input.xml” ifadesini gerçek dosya adı veya XML dosyasının yolu ile değiştirin.

Pratik örnek: Aşağıdaki XML dosyasını (sample.xml) inceleyin:

<fruits>
<fruit>
<name>Apple</name>
<color>Red</color>
</fruit>
<fruit>
<name>Banana</name>
<color>Yellow</color>
</fruit>
</fruits>

Tüm meyvelerin adlarını çıkarmak istiyorsanız, aşağıdaki komutu kullanabilirsiniz:

xmllint --xpath "//name" sample.xml

Komutun çıktısı:

<name>Apple</name><name>Banana</name>

XMLStarlet’ten farklı olarak, xmllint çıktısının eşleşen öğelerin çevreleyen XML etiketlerini içerdiğini unutmayın. Öğeleri niteliklerine, konumlarına veya diğer koşullara göre seçmek için XPath ifadelerinizi daha da hassaslaştırabilirsiniz. xmllint yardımcı programı, XML dosyalarını doğrulamak, biçimlendirmek ve işlemek için ek seçenekler sunarak onu XML verileriyle çalışmak için güçlü bir araç haline getirir.

3. Python’s xml.etree.ElementTree module

Python’un xml.etree.ElementTree modülü, XML dosyalarının ayrıştırılması ve işlenmesi için hafif ve verimli bir API sağlar. ElementTree kullanarak bir XML dosyasını ayrıştırmak için:

import xml.etree.ElementTree as ET

tree = ET.parse('input.xml')
root = tree.getroot()

for element in root.findall('element_name'):
print(element.text)

Verilen Python kod parçacığı, bir XML dosyasını ayrıştırmak ve etiket adlarını kullanarak belirli öğelerin metin içeriğini çıkarmak için xml.etree.ElementTree modülünü kullanır. İşte kodun bir dökümü:

  • import xml.etree.ElementTree as ET: Bu satır, xml.etree.ElementTree modülünü içe aktarır ve daha kolay başvuru için ona daha kısa bir diğer ad olan ET’yi verir.
  • tree = ET.parse(‘input.xml’): ET.parse() işlevi, giriş XML dosyasını okur ve bir ElementTree nesnesi döndürür. ‘input.xml’yi gerçek dosya adı veya XML dosyasının yolu ile değiştirin.
  • root = tree.getroot(): getroot() yöntemi, ayrıştırılan XML belgesinin kök öğesini bir Element nesnesi olarak döndürür.
  • for element in root.findall(‘element_name’):: findall() yöntemi, geçerli öğede (kök) köklenen alt ağaçta belirtilen etiket adına (“element_name”) sahip tüm öğeleri arar. ‘element_name’ öğesini ayıklamak istediğiniz XML öğesinin gerçek adıyla değiştirin. Bu satır ayrıca, eşleşen öğeler listesi üzerinde yinelenen bir for döngüsü başlatır.
  • print(element.text): Bu satır, eşleşen öğenin metin içeriğini yazdırır. Bir Element nesnesinin text niteliği, XML öğesinin başlangıç ​​ve bitiş etiketleri arasındaki metin içeriğini temsil eder.

Pratik örnek: Aşağıdaki XML dosyasını (sample.xml) inceleyin:

<fruits>
<fruit>
<name>Apple</name>
<color>Red</color>
</fruit>
<fruit>
<name>Banana</name>
<color>Yellow</color>
</fruit>
</fruits>

Sağlanan Python kod parçacığını kullanarak tüm meyvelerin adlarını çıkarmak istiyorsanız, “element_name” öğesini “name” ile değiştirirsiniz:

import xml.etree.ElementTree as ET

tree = ET.parse('sample.xml')
root = tree.getroot()

for element in root.findall('name'):
print(element.text)

Bu komut dosyasının çıktısı:

Apple
Banana

xml.etree.ElementTree modülü, Python’da XML dosyalarını ayrıştırmak, sorgulamak ve değiştirmek için hafif ve verimli bir API sağlar. Daha karmaşık XPath ifadeleri kullanarak veya XML ağaç yapısında programlı olarak gezinerek sorgularınızı daha da hassaslaştırabilirsiniz.

4. Perl’s XML::LibXML module

Perl’in XML::LibXML modülü, XML dosyalarını ayrıştırmak, doğrulamak ve değiştirmek için güçlü ve esnek bir API sağlar. Modülü kurmak için:

sudo cpan install XML::LibXML

XML::LibXML kullanarak bir XML dosyasını ayrıştırmak için:

use XML::LibXML;

my $
parser = XML::LibXML->new();
my $doc = $parser->parse_file('input.xml');
my $root = $doc->documentElement();

foreach my $element ($root->findnodes('//element_name')) {
print $element->textContent(), "\n";
}

Verilen Perl kod parçacığı, bir XML dosyasını ayrıştırmak ve etiket adlarını kullanarak belirli öğelerin metin içeriğini çıkarmak için XML::LibXML modülünü kullanır. İşte kodun bir dökümü:

  • use XML::LibXML;: Bu satır, Perl’de XML dosyalarını ayrıştırmak, doğrulamak ve değiştirmek için güçlü ve esnek bir API sağlayan XML::LibXML modülünü içe aktarır.
  • my $parser = XML::LibXML->new();: Bu satır, yeni bir XML::LibXML ayrıştırıcı nesnesi oluşturur.
  • my $doc = $parser->parse_file(‘input.xml’);: parse_file() yöntemi, girdi XML dosyasını okur ve bir XML::LibXML::Document nesnesi döndürür. ‘input.xml’yi gerçek dosya adı veya XML dosyasının yolu ile değiştirin.
  • my $root = $doc->documentElement();: DocumentElement() yöntemi, ayrıştırılan XML belgesinin kök öğesini bir XML::LibXML::Element nesnesi olarak döndürür.
  • foreach my $element ($root->findnodes(‘//element_name’)):: findnodes() yöntemi, geçerli öğeye ($root) karşı bir XPath ifadesini değerlendirir ve eşleşen öğelerin bir listesini döndürür. “//element_name” XPath ifadesi, XML dosyasındaki “element_name” öğelerinin tüm örneklerini, belge hiyerarşisindeki konumlarından bağımsız olarak seçer. ‘element_name’ öğesini ayıklamak istediğiniz XML öğesinin gerçek adıyla değiştirin. Bu satır ayrıca, eşleşen öğeler listesi üzerinde yinelenen bir foreach döngüsü başlatır.
  • print $element->textContent(), “\n”;: Bu satır, eşleşen öğenin metin içeriğini ve ardından yeni satır karakterini yazdırır. Bir XML::LibXML::Element nesnesinin textContent() yöntemi, XML öğesinin başlangıç ​​ve bitiş etiketleri arasındaki metin içeriğini döndürür.

Örneğin, aşağıdaki XML dosyasını (sample.xml) inceleyin:

<fruits>
<fruit>
<name>Apple</name>
<color>Red</color>
</fruit>
<fruit>
<name>Banana</name>
<color>Yellow</color>
</fruit>
</fruits>

Sağlanan Perl kod parçacığını kullanarak tüm meyvelerin adlarını çıkarmak istiyorsanız, ‘element_name’ öğesini ‘name’ ile değiştirirsiniz:

use XML::LibXML;

my $parser = XML::LibXML->new();
my $doc = $parser->parse_file('sample.xml');
my $root = $doc->documentElement();

foreach my $element ($root->findnodes('//name')) {
print $element->textContent(), "\n";
}

Bu komut dosyasının çıktısı:

Apple
Banana

The XML::LibXML module offers a comprehensive API for parsing, querying, and manipulating XML files in Perl. You can further refine your queries using more complex XPath expressions or by navigating the XML tree structure programmatically.

5. Saxon-HE

Saxon-HE, açık kaynaklı bir XSLT ve XQuery işlemcisidir. XPath veya XQuery ifadeleri kullanılarak XML dosyalarını ayrıştırmak için kullanılabilir. Saxon-HE’yi kurmak için JAR dosyasını resmi web sitesinden indirin:

wget https://repo1.maven.org/maven2/net/sf/saxon/Saxon-HE/10.6/Saxon-HE-10.6.jar

Saxon-HE kullanarak bir XML dosyasını ayrıştırmak için:

java -cp Saxon-HE-10.6.jar net.sf.saxon.Query -s:input.xml -qs:"//element_name"
  • java: Bu, Java uygulamalarını çalıştırmak için kullanılan komut satırı yardımcı programıdır.
  • -cp Saxon-HE-10.6.jar: Bu seçenek, Java uygulamasının sınıf yolunu Saxon-HE JAR dosyasını içerecek şekilde ayarlar (bu durumda sürüm 10.6). Saxon-HE-10.6.jar’ı gerçek dosya adıyla veya indirdiğiniz Saxon-HE JAR dosyasının yolu ile değiştirin.
  • net.sf.saxon.Query: Bu, XPath ve XQuery ifadelerini değerlendirmek için bir komut satırı arabirimi sağlayan Saxon-HE kitaplığının ana sınıfıdır.
  • -s:input.xml: Bu seçenek, verileri ayrıştırmak ve ayıklamak istediğiniz giriş XML dosyasını belirtir. input.xml’yi gerçek dosya adı veya XML dosyasının yolu ile değiştirin.
  • -qs:”//element_name“: Bu seçenek, verilen XPath ifadesini giriş XML dosyasına göre değerlendirir.
  • expression “//element_name” belge hiyerarşisindeki konumlarından bağımsız olarak, XML dosyasındaki “element_name” öğelerinin tüm örneklerini seçer. element_name öğesini, ayıklamak istediğiniz XML öğesinin gerçek adıyla değiştirin.

Pratik örnek: Aşağıdaki XML dosyasını (sample.xml) inceleyin:

<fruits>
<fruit>
<name>Apple</name>
<color>Red</color>
</fruit>
<fruit>
<name>Banana</name>
<color>Yellow</color>
</fruit>
</fruits>

Sağlanan komut satırını kullanarak tüm meyvelerin adlarını çıkarmak istiyorsanız, element_name öğesini name ile değiştirirsiniz:

java -cp Saxon-HE-10.6.jar net.sf.saxon.Query -s:sample.xml -qs:"//name"

Komutunun çıktısı:

Apple
Banana

Saxon-HE, XPath, XSLT ve XQuery kullanarak XML dosyalarını ayrıştırmak, sorgulamak ve dönüştürmek için güçlü ve esnek bir araçtır. XML verilerini dönüştürmek için daha karmaşık XPath ifadeleri kullanarak veya XSLT stil sayfaları veya XQuery betikleri uygulayarak sorgularınızı daha da hassaslaştırabilirsiniz.

Yaygın sorun giderme ipuçları

XML dosyalarını ayrıştırırken bazı yaygın sorunlarla karşılaşabilirsiniz. İşte birkaç sorun giderme ipucu:

  • Düzgün biçim olup olmadığını kontrol edin: Tek bir kök öğe, uygun şekilde iç içe geçmiş öğeler ve doğru öznitelik kullanımı dahil olmak üzere uygun bir yapıya sahip olduğunu doğrulayarak XML dosyasının iyi biçimlendirildiğinden emin olun.
  • Bir şemaya/DTD’ye göre doğrulama: XML dosyası şemaya veya DTD’ye uymuyorsa ayrıştırma hataları oluşabilir. Şema/DTD uyumluluğunu kontrol etmek için xmllint veya XMLStarlet gibi doğrulama araçlarını kullanın.
  • Ad alanlarını işleme: XML dosyanız ad alanlarını kullanıyorsa, öğeleri ve öznitelikleri doğru bir şekilde sorgulamak için bunları ayrıştırıcınıza kaydetmeniz gerekir.
  • Kodlama sorunlarını ele alın: XML dosyasının, XML bildiriminde belirtilen doğru kodlamaya sahip olduğundan (ör. UTF-8) ve ayrıştırıcınızın bu kodlamayı desteklediğinden emin olun.
  • Kitaplıkları ve araçları güncelleyin: Uyumluluk sorunlarını veya hatalarını önlemek için ayrıştırma için kullanılan kitaplıkların ve araçların en son sürümüne sahip olduğunuzdan emin olun.

Yazının orijinalini buradan okuyabilirsiniz.