www.fatihkabakci.com

Personal Website and Computer Science TUR EN

JAVA XML COZUMLEME(DOM PARSER)

Last update: 4/5/2015 11:36:00 PM

Yazan:Fatih KABAKCI

XML çözümleme(parsing) tekniklerinden bir tanesi olan DOM(Document Object Model) parser, xml uzantılı dosyaların çözümlenmesinin yanı sıra, bu dosyaların değiştirilmesi, yeniden yaratılması gibi amaçlar için kullanılmaktadır. DOM parser' lar genel olarak küçük boyutlu xml dosyalarının okunması ve xml dosyalarının içeriği ile ilgili düzenleme işlemlerinin yapılmasında kullanılır. Konuya bir örnek üzerinden devam edelim.

Aşağıda corporation.xml adlı bir xml dosyası örnek olarak verilmektedir.

corporation.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE corporation SYSTEM "corporation.dtd">
<corporation>
    <departmentList>
        <department id="1">
            <name>Computer Science</name>
        </department>
        
        <department id="2">
            <name>Human Resources</name>
        </department>
        
        <department id="3">
            <name>Security</name>
        </department>
    </departmentList>
    
    <personList>
        <person id="1">
            <name>John</name>
            <surname>Nash</surname>
            <age>32</age>
            <departmentId>1</departmentId>
        </person>
        
        <person id="2">
            <name>Jenny</name>
            <surname>Laure</surname>
            <age>27</age>
            <departmentId>2</departmentId>
        </person>
        
        <person id="3">
            <name>Ali</name>
            <surname>Veli</surname>
            <age>19</age>
            <departmentId>3</departmentId>
        </person>
    </personList>
</corporation>

Yukarıdaki xml dosyası corporation.dtd adlı bir doküman tip tanımlamasına(document type definition) göre hazırlanmıştır. Bu dosya ise aşağıda verilmiştir.

corporation.dtd

<!ELEMENT corporation (departmentList,personList)>
<!ELEMENT personList (person+)>
<!ELEMENT departmentList (department+)>
<!ELEMENT person (name,surname,age,departmentId)>
<!ELEMENT department (name)>
<!ATTLIST person id CDATA "0">
<!ATTLIST department id CDATA "0">
<!ELEMENT name (#PCDATA)>
<!ELEMENT surname (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT departmentId (#PCDATA)>

Kullanılan xml dosyasında 3 er adet department ve birlikte person elementleri tanımlanmıştır. Amacımız, Java ile DOM Parser API' sini kullanarak bu xml dosyasını çözümlemektir. DOM Parser API' si org.w3c.dom altında standart Java içerisinde tanımlı bir kütüphanedir. Örnek kod aşağıda gösterilmektedir.

package xmlparsing;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

/**
 * This class shows that how to parse a XML file using DOM parser
 * 
 * @author www.fatihkabakci.com
 */
public class DOMParsing {

   static Map<Integer, String> departmentMap = new HashMap<Integer, String>();

   public static String getDepartment(Integer departmentId) {
      String department = departmentMap.get(departmentId);
      return department;
   }

   public static void main(String[] args) {

      DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
      dbf.setValidating(true);
      dbf.setIgnoringElementContentWhitespace(true);

      try {
         Document document = dbf.newDocumentBuilder().parse("com.fatihkabakci/xmlparsing/corporation.xml");
         Element rootElement = document.getDocumentElement();
         System.out.println(" - " + rootElement.getNodeName());

         // put all departments into the departmentMap object
         NodeList departmentNodeList = rootElement.getElementsByTagName("department");
         for (int i = 0; i < departmentNodeList.getLength(); i++) {
            Node departmentNode = departmentNodeList.item(i);
            Element departmentElement = (Element) departmentNode;
            String departmentId = departmentElement.getAttribute("id");
            String departmentName = departmentElement.getElementsByTagName("name").item(0).getTextContent();
            departmentMap.put(Integer.valueOf(departmentId), departmentName);
         }

         // get all persons
         NodeList personNodeList = rootElement.getElementsByTagName("person");
         for (int i = 0; i < personNodeList.getLength(); i++) {
            Node personNode = personNodeList.item(i);
            Element personElement = (Element) personNode;
            String personId = personElement.getAttribute("id");
            String personName = personElement.getElementsByTagName("name").item(0).getTextContent();
            String personSurname = personElement.getElementsByTagName("surname").item(0).getTextContent();
            String personAge = personElement.getElementsByTagName("age").item(0).getTextContent();
            String personDepartmentId = personElement.getElementsByTagName("departmentId").item(0).getTextContent();
            String department = getDepartment(Integer.valueOf(personDepartmentId));
            System.out.println(personId + " " + personName + " " + personSurname + " " + personAge + " " + department);
         }
      }
      catch (NumberFormatException nfe) {
         System.err.println(nfe);
      }
      catch (ParserConfigurationException e) {
         e.printStackTrace();
      }
      catch (SAXException e) {
         e.printStackTrace();
      }
      catch (IOException e) {
         e.printStackTrace();
      }
   }
}

DOM çözümleme de ilk olarak Soyut Fabrika Tasarım Desenini kullanan DocumentBuilderFactory sınıfından bir örnek oluşturmakla başlar. Burada xml dosyalarının doğru yazılıp yazılmadığı denetim kurallarını etkinleştirdikten sonra esas olan parsing işlemi yapılır. DOM çözümleme de parse işlemi tamamlandıktan sonra bir Document nesnesi elde edilir. Bu nesne düzgün bir biçimde elde edildiği andan itibaren aslında parse etme işlemi tamamlanmış demektir. Bundan sonra yapılacak işlemler, Document nesnesi içerisindeki node ve element sınıflarını kullanarak verileri elde etmek olacaktır. Yukarıdaki örnekte en çok kullanılan DOM parser metotları ve nesneleri verilmektedir.

Örnek program, root elementi elde ettikten sonra, getElementsByTagName() metoduna göre NodeList elde ederek verileri teker teker tarar. DOM parser da her Node item() metotları ile elde edilir. Düğüm içerisindeki verileri elde etmek için Node nesnesi Element nesnesine cast edilir. Programda ilk olarak tüm departmanlar bir map içerisinde kaydedildikten sonra, kişiler ile eşleştirilmiştir.

Yukarıdaki programın çıktısı aşağıda verilmiştir.

 - corporation
1 John Nash 32 Computer Science
2 Jenny Laure 27 Human Resources
3 Ali Veli 19 Security

DOM Parser' lar büyük boyutlu xml dosyaları çözümleme de kullanılırken yavaş çalışabilir. Büyük boyutlu xml dosyalarını kullanırken SAX Parser' ları tercih ediniz.

There has been no comment yet

Name:


Question/Comment
   Please verify the image




The Topics in Computer Science

Search this site for





 

Software & Algorithms

icon

In mathematics and computer science, an algorithm is a step-by-step procedure for calculations. Algorithms are used for calculation, data processing, and automated reasoning.

Programming Languages

icon

A programming language is a formal constructed language designed to communicate instructions to a machine, particularly a computer. It can be used to create programs to control the behavior of a machine. Java,C, C++,C#

Database

icon

A database is an organized collection of data. The data are typically organized to model aspects of reality in a way that supports processes requiring information.

Hardware

icon

Computer hardware is the collection of physical elements that constitutes a computer system. Computer hardware refers to the physical parts or components of a computer such as the monitor, memory, cpu.

Web Technologies

icon

Web development is a broad term for the work involved in developing a web site for the Internet or an intranet. Html,Css,JavaScript,ASP.Net,PHP are one of the most popular technologies. J2EE,Servlet, JSP,JSF, ASP

Mobile Technologies

icon

Mobile application development is the process by which application software is developed for low-power handheld devices, such as personal digital assistants, enterprise digital assistants or mobile phones. J2ME

Network

icon

A computer network or data network is a telecommunications network that allows computers to exchange data. In computer networks, networked computing devices pass data to each other along data connections.

Operating Systems

icon

An operating system is software that manages computer hardware and software resources and provides common services for computer programs. The OS is an essential component of the system software in a computer system. Linux,Windows

Computer Science

icon

Computer science is the scientific and practical approach to computation and its applications.A computer scientist specializes in the theory of computation and the design of computational systems.