Ağaç-tabanlı işlem modeli için gelişirilmiş olan arayüz DOM (Document Object Model) API (Application Programming Interface) olarak adladırılır. DOM API dil ve platformdan bağımsız W3C’nin önerdiği bir arayüz spesifikasyonudur. Geliştirilen XML parser’larının büyük çoğunluğu bu arayüz spesifikasyonuna göre inşa edilmiştir. Bu kısımda Microsoft MSXML parser kullarak bazı örnekler vereceğiz. MSXML parser bir COM nesnesi olarak yazıldığından hem istemci tarayıcı tarafında hemde sunucu makinalarda çalışabilmektedir.
Ağaç yapısındaki XML belgelerini işlemek için DOM API bir çok nesne, yöntem ve özellik içerir. Aşağıda DOM’da kullanılan önemli nesneler listelenmiştir.
Nesne -------------------- Tanım
Document -------------------- XML belgesinin kök nesnesi
Element -------------------- XML Elemanı
Attribute veya Attr -------------------- XML özelliği
Node -------------------- XML ağaçındaki bir düğüm
NodeList -------------------- Düğümler Kümesi
Text -------------------- Bir eleman veya özellik içindeki metin
Comment -------------------- XML açıklaması
ProcessingInstruction -------------------- XML işlem komutu
MSXML parser’nın Document nesnesinin önemli olan özellik ve method’ları aşağıda verilmiştir.
Özellik/Method -------------------- Tanım
Doctype -------------------- Document DTD
DocumentElement -------------------- Kök eleman
ChildNodes -------------------- Alt düğüm listesi
FirstChild -------------------- İlk düğüm
LastChild -------------------- Son düğüm
Text -------------------- Belgede geçen tüm metinler
Async -------------------- False ise belge tamamen yüklediğin de cağıran method’a kontrolu devr eder. True ise yükleme esnasında devr eder.
ValidateOnParse -------------------- Beglenin DTD göre doğrulanması
Load() -------------------- Bir XML belgesinin URL’le belirtiği dosyadan yükler
LoadXML() -------------------- XML belgesini direct metinden yükler
GetElementsByTagName() -------------------- Belirli bir tipteki elemanlar kümesini getirir
Aşağıda MSXML parser’nın Node nesnesinin önemli olan özellik ve methodları verilmiştir.
Özellik/Method -------------------- Tanım
ChildNodes -------------------- Alt düğüm listesi
FirstChild -------------------- İlk düğüm
LastChild -------------------- Son düğüm
ParentNode -------------------- Üst seviye düğüm
previousSibling -------------------- Aynı seviye önceki düğüm
nextSibling -------------------- Aynı seviye sonraki düğüm
NodeName -------------------- Düğüm ismi
NodeValue -------------------- Düğüm değeri
TransformNode() -------------------- Belirtilen XSL dosyasına göre dönüşüm yapar
Aşağıda MSXML parser’nın NodeList nesnesinin önemli olan methodları verilmiştir
Method -------------------- Tanım
item() -------------------- Düğüm listesinden istenilen düğümü getirir.
nextNode() -------------------- Düğüm listesinden istenilen bir sonraki düğümü getirir.
reset() -------------------- Liste imini başa döndürür.
Bu uygulamada LoadDoc() fonksiyonu XML belgesini yükleyerek belgeyi ağaç yapısında bellekte oluşturur. Bu örnekteki aşağıdaki satır bir COM nesnesi olan MSXML parser’nı çağırır.
XML:
xmldoc = new ActiveXObject("microsoft.xmldom");
Aşağıdaki satır Movies.xml dosyasını yükler ve XML ağaçını oluşturur.
XML:
xmldoc.load("Movies.xml");
Aşağıdaki satır belgenin kök elemanına erişir.
XML:
root = xmldoc.documentElement;
Aşağıdaki ifade kök elemanın altında bulunan elemanların adeti kadar bir döngü oluşturur. Bu döngü içinde alt elemanlara erişiriz.
XML:
for (i = 0; i < root.childNodes.length; i++)
Aşağıdaki kod kök elemanın (movies) altındaki movie elemanının ilk elemanının (title) içeriğini getirir. ChildNodes.Item(i) alt düğümlerdeki her hangi bir eleman indeks’le ulaşmamızı sağlar.
XML:
root.childNodes.item(i).firstChild.text
Aşağıdaki kod kök elemanın (movies) altındaki movie elemanının son elemanının (comments) içeriğini getirir.
XML:
root.childNodes.item(i).lastChild.text
Görülen XML parser uygulaması movies.xml dosyasında bulunan filimlerdeki aktorleri listeler. Programın üretiği çıktı listelenmiştir. Bu programdaki aşağıda verilen kod belge içinde geçen bütün actor elemanların bir listesini oluşturur. Oluşan aktörler listesindeki elemanlar bir döngü içerisinde taranarak aktör isimleri actors(i).text ifadesi ile listelenir.
XML:
actors = xmldoc.getElementsByTagName("actor");
XML:
<?xml version="1.0" standalone="no"?>
<!DOCTYPE movies SYSTEM "Movies.dtd">
<movies>
<movie type="comedy" rating="PG-13" review="5" year="1987">
<title>Raising Arizona</title>
<writer>Ethan Coen</writer>
<writer>Joel Coen</writer>
<producer>Ethan Coen</producer>
<director>Joel Coen</director>
<actor>Nicolas Cage</actor>
<actor>Holly Hunter</actor>
<actor>John Goodman</actor>
<comments>A classic one-of-a-kind screwball love story.</comments>
</movie>
<movie type="comedy" rating="R" review="5" year="1988">
<title>Midnight Run</title>
<writer>George Gallo</writer>
<producer>Martin Brest</producer>
<director>Martin Brest</director>
<actor>Robert De Niro</actor>
<actor>Charles Grodin</actor>
<comments>The quintessential road comedy.</comments>
</movie>
<movie type="mystery" rating="R" review="5" year="1995">
<title>The Usual Suspects</title>
<writer>Christopher McQuarrie</writer>
<producer>Bryan Singer</producer>
<producer>Michael McDonnell</producer>
<director>Bryan Singer</director>
<actor>Stephen Baldwin</actor>
<actor>Gabriel Byrne</actor>
<actor>Benicio Del Toro</actor>
<actor>Chazz Palminteri</actor>
<actor>Kevin Pollak</actor>
<actor>Kevin Spacey</actor>
<comments>A crime mystery with incredibly intricate plot twists.</comments>
</movie>
<movie type="sci-fi" rating="PG-13" review="4" year="1989">
<title>The Abyss</title>
<writer>James Cameron</writer>
<producer>Gale Anne Hurd</producer>
<director>James Cameron</director>
<actor>Ed Harris</actor>
<actor>Mary Elizabeth Mastrantonio</actor>
<comments>A very engaging underwater odyssey.</comments>
</movie>
</movies>
Movies.xml XML belgesi [4]
XML:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<title>List Movies 2 Example HTML Document</title>
<script language="JavaScript">
var xmldoc;
function LoadDoc() {
xmldoc = new ActiveXObject("microsoft.xmldom");
xmldoc.load("Movies.xml");
}
function ListMovies() {
LoadDoc();
root = xmldoc.documentElement;
for (i = 0; i < root.childNodes.length; i++) {
DOCCONTENT.innerHTML += "<b>" +
root.childNodes.item(i).firstChild.text + "</b><br>";
DOCCONTENT.innerHTML += root.childNodes.item(i).lastChild.text +
"<br><br>";
}
}
</script>
</head>
<body>
Click the button to list the movies in the Movies XML document.
<br>
<input type="button" value="List Movies" onclick="ListMovies()">
<div id="DOCCONTENT"></div>
</body>
</html>
Movies.xml belgesindeki film ve film açılamalarını listeleyen Javascript kodu [4]
XML:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<title>List Actors Example HTML Document</title>
<script language="JavaScript">
var xmldoc;
function LoadDoc() {
xmldoc = new ActiveXObject("microsoft.xmldom");
xmldoc.load("Movies.xml");
}
function ListActors() {
LoadDoc();
actors = xmldoc.getElementsByTagName("actor");
for (i = 0; i < actors.length; i++) {
DOCCONTENT.innerHTML += actors(i).text + "<br>";
}
}
</script>
</head>
<body>
Click the button to list the actors in the Movies XML document.
<br>
<input type="button" value="List Actors" onclick="ListActors()">
<div id="DOCCONTENT"></div>
</body>
</html>
– Movies.xml belgesindeki aktör isimlerini listeleyen Javascript kodu [4]