Bu Sayfayı Paylaş:

Bilgi/Açıklama

XML Nedir?

XML (Extensible Markup Language - Genişletilebilir İmleme Dili), verileri text olarak ve hiyerarşik bir şekilde saklamakta kullanılır. Örneğin aşağıda bir sınıfın öğrencilerinin saklandığı bir XML örneği bulunmaktadır.
<class name="5fena">
    <student no="1234">
        <name>Ali</name>
        <surname>Yılmaz</surname>
    </student>
    <student no="1202">
        <name>Mehmet</name>
        <surname>Demir</surname>
     </student>    
</class>

Bu bilgi bir XML dosyasında saklanmaktadır. Java bu bilgileri alabilmeniz için JAXP ( Java API for XML Processing - Java içim XML İşleme Betikliği) adında bir geniş bir API sağlar. Yukarıdaki örnek bir Document (Belge) bütünlüğüne karşılık gelir. Bu Document'in root element (kök öğe) birimi class'tır. Element (Öge) ise başlayan ve biten bölümdür. Örnekteki student elementinin no adında bir attribute (nitelik) birimi vardır.

Bilgi/Açıklama

DOM Parser

Bir XML verisinin nesne karşılığı Document nesnesidir. Java'da bir XML belgesinin içeriği Document nesnesine yüklenebilir. Bu işlemi yapan sınıflara DOM Parser (DOM Ayrıştırıcı) denir. Tüm bilgi bu Document nesnesinden alınabilir. DOM (Document Object Model - Belge Nesne Taslamı) ise; XML, HTML gibi ağaç gibi yapılara erişim için kullanılan dilden bağımsız bir arayüzdür.
Document nesnesini oluşturmak için DocumentBuilder (Belge Yapıcı) kullanılır. DocumentBuilder bir dosyadan XML'i Document nesnesine yükler. Document nesnesinden getElementsByTagName() (öğeleri etiket adıyla edin) ile verilen isimdeki tüm element'ler alınabilir. Element'ten element'in adı, değeri, varsa attribute'lerinin değeri alınabilir.
Aşağıdaki örnekte students XML'indeki tüm öğrencilerin adı, soyadı ve numarası ekrana basılır:
import javax.xml.parsers.*;
import org.w3c.dom.*;
public class DOMBuilderTest {   
  public static void main(String[] args){
    String uri="D:\\students.xml";
    try{
      // Factory nesnesi yaratılıyor
      DocumentBuilderFactory factory
          =DocumentBuilderFactory.newInstance();
      // DocumentBuilder yaratılıyor
      DocumentBuilder builder
          =factory.newDocumentBuilder();
      // Document parse ediliyor
      Document document=builder.parse(uri);
      // root elementi alınıyor.
      Element root=document.getDocumentElement();                                   
 	 // student elementlerinin listesi alınıyor.	 NodeList students=root
         .getElementsByTagName("student");
      for(int i=0;i<students.getLength();i++){
        Element element
          =(Element)students.item(i);
       String no=element.getAttribute("no");
       NodeList nameElements=element
           .getElementsByTagName("name");
       NodeList surnameElements=element
           .getElementsByTagName("surname");
       Element nameElement
           =(Element)nameElements.item(0);
       Element surnameElement
           =(Element)surnameElements.item(0);
       Text nameText=(Text)nameElement
           .getChildNodes().item(0);
       Text surnameText=(Text)surnameElement
           .getChildNodes().item(0);                
       System.out.println(no+" "+
            nameText.getNodeValue()+" "+
            surnameText.getNodeValue());
     }
 }catch(Exception e){
      e.printStackTrace();
    } 
  }
}
Aşağıdaki gibi sonuç görülür:
1234 Ali Yılmaz
1202 Mehmet Demir
Bir XML belgesinden gerekli bilgiyi almak için önce Document nesnesini oluşturmamız gerekir:
DocumentBuilderFactory factory
    =DocumentBuilderFactory.newInstance();
DocumentBuilder builder
   =factory.newDocumentBuilder();
Document document
   =builder.parse(uri);
Yukarıdaki kod Document nesnesini oluşturmak için kullanılır. getDocumentElement() (belge öğesini edin) yöntemi root element'ini döndürür. getElementsByTagName() ile bir elementin içindeki aynı isimli elementlerin listesini döndürür. Örnekteki getChildNodes() (çocuk düğümleri edin) ise bir elementin tüm alt element'lerini döndürür. Dikkate edilirse name element'ini aldıktan sonra
(Text)nameElement.getChildNodes().item(0);

şeklinde içindeki yazı alınmaktadır.



Bu Sayfayı Paylaş:

İletişim/Bize Yazın   mh@fibiler.com   Google+   Facebook   Twitter   fibiler@googlegroups.com
Her Hakkı Saklıdır
Bu sitede yayınlanan tüm bilgi ve fikirlerin kullanımından fibiler.com sorumlu değildir.
Bu sitede üretilmiş , derlenmiş içerikleri, fibiler.com'u kaynak göstermek koşuluyla kendi sitenizde kullanılabilirsiniz. Ancak telif hakkı olan içeriklerin hakları sahiplerine aittir