Groovy - XML

XML, programcıların işletim sistemi ve / veya geliştirme dili ne olursa olsun diğer uygulamalar tarafından okunabilen uygulamalar geliştirmesine olanak tanıyan taşınabilir, açık kaynaklı bir dildir. Bu, uygulamalar arasında veri alışverişi için kullanılan en yaygın dillerden biridir.

XML nedir?

Genişletilebilir Biçimlendirme Dili XML, HTML veya SGML'ye çok benzer bir biçimlendirme dilidir. Bu, World Wide Web Consortium tarafından önerilir ve açık bir standart olarak mevcuttur. XML, SQL tabanlı bir omurga gerektirmeden küçük ila orta büyüklükteki verileri izlemek için son derece kullanışlıdır.

Groovy'de XML Desteği

Groovy dili ayrıca XML dili için zengin bir destek sağlar. Kullanılan en temel iki XML sınıfı şunlardır:

  • XML Markup BuilderGroovy, çeşitli ağaç yapılı nesne temsilleri yapmak için alt sınıflara ayrılabilen ağaç tabanlı BuilderSupport'u destekler. Genellikle, bu oluşturucular XML biçimlendirmesini, HTML biçimlendirmesini temsil etmek için kullanılır. Groovy'nin biçimlendirme üreteci, sözde yöntemlere yapılan çağrıları yakalar ve bunları bir ağaç yapısının öğelerine veya düğümlerine dönüştürür. Bu sözde yöntemlerin parametreleri, düğümlerin nitelikleri olarak ele alınır. Yöntem çağrısının bir parçası olarak kapatmalar, sonuçta ortaya çıkan ağaç düğümü için iç içe geçmiş alt içerik olarak kabul edilir.

  • XML Parser- Groovy XmlParser sınıfı, bir XML belgesini bir Node örnekleri ağacına ayrıştırmak için basit bir model kullanır. Her Düğüm, XML öğesinin adına, öğenin niteliklerine ve tüm alt Düğümlere referanslara sahiptir. Bu model, çoğu basit XML işleme için yeterlidir.

Tüm XML kodu örneklerimiz için, XML dosyasının oluşturulması ve ardından dosyayı okumak için aşağıdaki basit XML dosyası movies.xml'yi kullanalım.

<collection shelf = "New Arrivals"> 

   <movie title = "Enemy Behind"> 
      <type>War, Thriller</type> 
      <format>DVD</format> 
      <year>2003</year> 
      <rating>PG</rating> 
      <stars>10</stars> 
      <description>Talk about a US-Japan war</description> 
   </movie> 
	
   <movie title = "Transformers"> 
      <type>Anime, Science Fiction</type>
      <format>DVD</format> 
      <year>1989</year> 
      <rating>R</rating> 
      <stars>8</stars> 
      <description>A schientific fiction</description> 
   </movie> 
	
   <movie title = "Trigun"> 
      <type>Anime, Action</type> 
      <format>DVD</format> 
      <year>1986</year> 
      <rating>PG</rating> 
      <stars>10</stars> 
      <description>Vash the Stam pede!</description> 
   </movie> 
	
   <movie title = "Ishtar"> 
      <type>Comedy</type> 
      <format>VHS</format> 
      <year>1987</year> 
      <rating>PG</rating> 
      <stars>2</stars> 
      <description>Viewable boredom </description> 
   </movie> 
	
</collection>

XML Biçimlendirme Oluşturucu

Sözdizimi

public MarkupBuilder()

MarkupBuilder, tüm XML belgesini oluşturmak için kullanılır. XML belgesi, önce XML belge sınıfının bir nesnesi oluşturularak oluşturulur. Nesne oluşturulduktan sonra, XML belgesinin çeşitli öğelerini oluşturmak için bir sözde yöntem çağrılabilir.

Yukarıdaki XML belgesinden bir bloğun, yani bir film öğesinin nasıl oluşturulacağına ilişkin bir örneğe bakalım -

import groovy.xml.MarkupBuilder 

class Example {
   static void main(String[] args) {
      def mB = new MarkupBuilder()
		
      // Compose the builder
      mB.collection(shelf : 'New Arrivals') {
         movie(title : 'Enemy Behind')
         type('War, Thriller')
         format('DVD')
         year('2003')
         rating('PG')
         stars(10)
         description('Talk about a US-Japan war') 
      }
   } 
}

Yukarıdaki örnekte, aşağıdaki noktalara dikkat edilmelidir -

  • mB.collection() - Bu, <collection> </collection> baş XML etiketini oluşturan bir biçimlendirme oluşturucudur.

  • movie(title : 'Enemy Behind')- Bu sözde yöntemler, bu yöntemle alt etiket oluşturarak değeri olan etiketi oluşturur. Title adında bir değer belirterek, bu aslında öğe için bir özniteliğin oluşturulması gerektiğini gösterir.

  • XML belgesinin kalan öğelerini oluşturmak için sözde yönteme bir kapatma sağlanır.

  • MarkupBuilder sınıfı için varsayılan kurucu, oluşturulan XML'in standart çıkış akışına verilmesi için başlatılır.

Yukarıdaki programı çalıştırdığımızda şu sonucu alacağız -

<collection shelf = 'New Arrivals'> 
   <movie title = 'Enemy Behind' /> 
      <type>War, Thriller</type> 
      <format>DVD</format> 
      <year>2003</year> 
      <rating>PG</rating> 
      <stars>10</stars> 
      <description>Talk about a US-Japan war</description> 
   </movie> 
</collection>

XML belgesinin tamamını oluşturmak için aşağıdaki şeylerin yapılması gerekir.

  • Elemanların farklı değerlerini depolamak için bir harita girişinin oluşturulması gerekir.
  • Haritanın her bir öğesi için, her bir öğeye değer atıyoruz.
import groovy.xml.MarkupBuilder 

class Example {
   static void main(String[] args) {
      def mp = [1 : ['Enemy Behind', 'War, Thriller','DVD','2003', 
         'PG', '10','Talk about a US-Japan war'],
         2 : ['Transformers','Anime, Science Fiction','DVD','1989', 
         'R', '8','A scientific fiction'],
         3 : ['Trigun','Anime, Action','DVD','1986', 
         'PG', '10','Vash the Stam pede'],
         4 : ['Ishtar','Comedy','VHS','1987', 'PG', 
         '2','Viewable boredom ']] 
			
      def mB = new MarkupBuilder()  
		
      // Compose the builder
      def MOVIEDB = mB.collection('shelf': 'New Arrivals') {
         mp.each {
            sd -> 
            mB.movie('title': sd.value[0]) {  
               type(sd.value[1])
               format(sd.value[2])
               year(sd.value[3]) 
               rating(sd.value[4])
               stars(sd.value[4]) 
               description(sd.value[5]) 
            }
         }
      }
   } 
}

Yukarıdaki programı çalıştırdığımızda şu sonucu alacağız -

<collection shelf = 'New Arrivals'> 
   <movie title = 'Enemy Behind'> 
      <type>War, Thriller</type> 
      <format>DVD</format> 
      <year>2003</year> 
      <rating>PG</rating> 
      <stars>PG</stars> 
      <description>10</description> 
   </movie> 
   <movie title = 'Transformers'> 
      <type>Anime, Science Fiction</type> 
      <format>DVD</format> 
      <year>1989</year>
	  <rating>R</rating> 
      <stars>R</stars> 
      <description>8</description> 
   </movie> 
   <movie title = 'Trigun'> 
      <type>Anime, Action</type> 
      <format>DVD</format> 
      <year>1986</year> 
      <rating>PG</rating> 
      <stars>PG</stars> 
      <description>10</description> 
   </movie> 
   <movie title = 'Ishtar'> 
      <type>Comedy</type> 
      <format>VHS</format> 
      <year>1987</year> 
      <rating>PG</rating> 
      <stars>PG</stars> 
      <description>2</description> 
   </movie> 
</collection>

XML Ayrıştırma

Groovy XmlParser sınıfı, bir XML belgesini bir Node örnekleri ağacına ayrıştırmak için basit bir model kullanır. Her Düğüm, XML öğesinin adına, öğenin niteliklerine ve tüm alt Düğümlere referanslara sahiptir. Bu model, çoğu basit XML işleme için yeterlidir.

Sözdizimi

public XmlParser() 
   throws ParserConfigurationException, 
      SAXException

Aşağıdaki kodlar, XML ayrıştırıcısının bir XML belgesini okumak için nasıl kullanılabileceğinin bir örneğini gösterir.

Diyelim ki Movies.xml adında aynı belgeye sahibiz ve XML belgesini ayrıştırıp kullanıcıya uygun bir çıktı görüntülemek istediğimizi varsayalım. Aşağıdaki kod, XML belgesinin tüm içeriğinde nasıl gezinebileceğimizi ve kullanıcıya nasıl uygun bir yanıt gösterebileceğimizi gösteren bir parçadır.

import groovy.xml.MarkupBuilder 
import groovy.util.*

class Example {

   static void main(String[] args) { 
	
      def parser = new XmlParser()
      def doc = parser.parse("D:\\Movies.xml");
		
      doc.movie.each{
         bk->
         print("Movie Name:")
         println "${bk['@title']}"
			
         print("Movie Type:")
         println "${bk.type[0].text()}"
			
         print("Movie Format:")
         println "${bk.format[0].text()}"
			
         print("Movie year:")
         println "${bk.year[0].text()}"
			
         print("Movie rating:")
         println "${bk.rating[0].text()}"
			
         print("Movie stars:")
         println "${bk.stars[0].text()}"
			
         print("Movie description:")
         println "${bk.description[0].text()}"
         println("*******************************")
      }
   }
}

Yukarıdaki programı çalıştırdığımızda şu sonucu alacağız -

Movie Name:Enemy Behind 
Movie Type:War, Thriller 
Movie Format:DVD 
Movie year:2003 
Movie rating:PG 
Movie stars:10 
Movie description:Talk about a US-Japan war 
******************************* 
Movie Name:Transformers 
Movie Type:Anime, Science Fiction 
Movie Format:DVD 
Movie year:1989 
Movie rating:R 
Movie stars:8 
Movie description:A schientific fiction 
******************************* 
Movie Name:Trigun 
Movie Type:Anime, Action
Movie Format:DVD 
Movie year:1986 
Movie rating:PG 
Movie stars:10 
Movie description:Vash the Stam pede! 
******************************* 
Movie Name:Ishtar 
Movie Type:Comedy 
Movie Format:VHS 
Movie year:1987 
Movie rating:PG 
Movie stars:2 
Movie description:Viewable boredom

Yukarıdaki kodla ilgili dikkat edilmesi gereken önemli noktalar.

  • XmlParser sınıfının bir nesnesi, XML belgesini ayrıştırmak için kullanılabilmesi için oluşturuluyor.

  • Ayrıştırıcıya XML dosyasının konumu verilir.

  • Her bir film öğesi için, her bir alt düğüme göz atmak ve ilgili bilgileri görüntülemek için bir kapanış kullanıyoruz.

Movie öğesinin kendisi için, movie öğesine eklenen title niteliğini görüntülemek için @ sembolünü kullanıyoruz.