|
|
||||||||||||
|
|
XML BELGELERİ İLE ÇALIŞMAK Paylaşılabilen ve anlamlandırılabilen yetenekli XML belgeleri, Microsoft’un MSXML paketi ile çok kolay yönetiliyor. XMLHTTP ile Internet’ten XML belgesi ya da herhangi bir dosya yükleyin. DOMDocument ile belgeleri okuyun ve işleyin. XML belgelerini bilgisayarınıza kaydedin. XML BELGELERİNİ TANIYIN XML belgeleri öncelikle tanımlayıcı bir ilk satırdan ve bir kök elementten (root-element) oluşur. Her XML belgesinde mutlaka ve yalnızca bir kök element vardır. Örneğin kitap bilgilerinin listelendiği bir belgede bu, KITAPLAR isminde olabilir. Bunun altında KITAP adlı alt elementler (child-element) yer alabilir. Her bir elementin altında birçok seviyede alt element olabilir. <?xml version='1.0'?>
<KITAPLAR>
<KITAP>
<KITAPADI>Stratejik İttifak</KITAPADI>
<YAZAR>Alptekin Dursunoğlu</YAZAR>
<YAYINEVI>Anka</YAYINEVI>
</KITAP>
<KITAP>
<KITAPADI>Kılıç Yarası Gibi</KITAPADI>
<YAZAR>Ahmet Altan</YAZAR>
<YAYINEVI>Can</YAYINEVI>
</KITAP>
</KITAPLAR>
XML belgeleri açık ve okunaklı bir yapıda olduğundan, bunları düzenlemek için özel bir editöre ihtiyaç yoktur. Windows’taki Not Defteri’ni ya da CD’de verdiğimiz, daha kullanışlı XML Notepad programını kullanabilirsiniz.
XML belgelerinde her bir element için Attribute, Text, Comment gibi özellikler tanımlanabiliyor. XML Notepad’de Insert menüsü altındaki komutları kullanarak bunları belgeye ekleyebilirsiniz. Attribute (öznitelik) dışında diğer ikisi sık kullanılmaz. Elementler için ek bir özellik tanımlar ve elementlere çok benzer. Örneğin her bir KITAP elementi için SAYFA adlı bir attribute ya da bir alt element kullanılabilir. SAYFA bilgisi için attribute ya da alt elementten hangisini kullanmanız gerektiğine kendiniz karar vermelisiniz. <KITAP SAYFA="120"> <KITAPADI>Hayvan Çiftligi</KITAPADI> <YAZAR>George Orwell</YAZAR> </KITAP> <KITAP> <SAYFA>120</SAYFA> <KITAPADI>Hayvan Çiftligi</KITAPADI> <YAZAR>George Orwell</YAZAR> </KITAP> Yukarıdaki iki elementin birincisinde SAYFA bilgisi attribute olarak tanımlanmış. Alttakinde ise bu bilgi element olarak yer alıyor. Bizim kayıtlarımızda sayfa bilgisi az kullanıldığı için bunu attribute olarak kullanmaya karar verdik. Bunun gibi yanyana birçok attibute ekleyebilirsiniz.
Comment değerleri belgede kullanılmayan ama yorum niteliği taşıyan bilgilerdir. Text değerleri ise kullanıcının serbest metin tanımlaması için oluşturulmuş. <KITAP SAYFA="120"> <!--İlginç bir kitap--> Hikayede hayvanlar insanlastirilmis... <KOD>3</KOD> <KITAPADI>Hayvan Çiftliği</KITAPADI> <YAZAR>George Orwell</YAZAR> <YAYINEVI>MEB</YAYINEVI> <CEVIREN>Halide Edip Adıvar</CEVIREN> </KITAP> Resimdeki Comment (açıklama) alanının dosya içinde <!-- ve --> arasında yer aldığına dikkat edin. Açıklama alanlarına dosyanın yapısını bozmayacak şekilde her türlü bilgi yazılabilir. Şüpheli metinler için ise CDATA bölgeleri kullanın. Belgenin yapısını değiştirmesi muhtemel metinleri CDATA bölümlerine aşağıdakine benzer şekilde yerleştirmek gerekir. <KITAP> Yeni bir kitap <KITAPADI>Hayvan Çiftliği</KITAPADI> <YAZAR>George Orwell</YAZAR> <![CDATA[ Buraya herhangi bir metin yazılabilir. <DENEME> <TEST/> ]]> </KITAP> Mavi renkli satırlar CDATA bölgelerinin başlangıç ve bitişini ifade ediyor. <![CDATA[ ile ]]> arasında kalan kısımlar bu bölgeye dahildir. Buradaki tek şart bitiş etiketinin metin bölgesi içinde yer almaması gerektiğidir. Bu bölgeler XML Notepad’de Text alanları içine dahil ediliyor. MSXML İLE ÇALIŞMAK Microsoft’un çıkardığı XML Core Services (MSXML) paketi XML ile çalışmak için gerekli her türlü bileşeni beraberinde ücretsiz getiriyor. Web’den yüklediğiniz XML dosyalarını düzenlemeden, XSL şablonları ile biçimlendirip HTML belgeleri üretmeye kadar birçok işi bu paket yapabiliyor. MSXML’i yüklemek için CD’mizdeki msxml4.msi dosyasını bilgisayarınıza kurabilirsiniz. XML belgeleri ile çalışırken MSXML.DOMDocument bileşenine sıkça başvurmanız gerekecek. MSXML içindeki DOMDocument bileşenini oluşturduktan sonra Load ve LoadXML yöntemlerini kullanarak XML içeriğini bu nesneye yüklemek gerekiyor. Dim xmlbelge Load satırında yerel diskteki bir dosyanın yolunu yazabilirsiniz. XML içeriğini doğrudan yüklemek için LoadXML yöntemini aşağıdaki gibi kullanın. xmlbelge.LoadXML "xml metnini buraya yazın." DOMDocument nesnesi web kaynağından ya da diskten bir dosya yüklerken belgenin geçerliliğini kontrol eder. Eğer alınan bilgi geçerli bir XML içeriği değilse Load fonksiyonları yanlış(false) değerini döndürürler. Bu durumda aşağıdaki gibi yükleme yapmak daha kontrollü olmayı sağlar. If
xmlbelge.Load("http://www.chip.com.tr/xml/test/personel.xml") Then Web alanından herhangi bir dosya yüklemek için ise XMLHTTP nesnesi etkindir. Bu bileşen Internet’teki tüm belgeleri yükleyebilir. Dim belge XMLHTTP’nin ResponseText özelliği alınan içeriği gösterir. Eğer XMLHTTP ile XML belgesini yükleyip kullanmak istiyorsanız bunu DOMDocument nesnesine iletmelisiniz. xmlbelge.Load belge.responseXML Belgelerin arkaplanda (eşzamanlı olmadan) yüklenmesi için Async özelliği kullanılır. Bu özelliğin False olarak ayarlanması eş zamanlı çalışılacağı, yani yükleme tamamlanmadan alt satıra geçilmeyeceği anlamına gelir. Gelişmiş XML uygulamaları tasarlayanlar bu özelliği kimi zaman True olarak ayarlamak isteyebilirler. Herhangi bir şekilde DOMDocument’e yüklediğiniz XML içeriğini dosyaya kaydetmek için Save komutunu kullanın. xmlbelge.Save "c:\deneme.xml" Yukarıdaki kodlarda Belge ve XMLBelge adlarına dikkat edin. Belge, bir XMLHTTP nesnesi olup herhangi bir web içeriğini ifade ediyor. XMLBelge ise DOMDocument türünde geçerli bir XML içeriğinden oluşuyor. DOMDocument, XMLHTTP’den bilgi alırken bazı düzenlemeler yapabilir. Paragrafları ve boşlukları kendine göre yeniden düzenleyebilir. XMLHTTP ile yüklediğiniz belgelerin baş tarafında boş satır olmamasına dikkat edin. DOMDocument nesnesi maalesef üstteki boş satırları kontrol etmeyip hata oluşturuyor. Dim metin As String
DOMDocument nesnesi geçerli bir XML belgesini ifade etmekle birlikte, bu belge bir çok alt belgeyi içermektedir ve bunların birçoğu için MSXML’de sınıflar oluşturulmuştur. DOMDocument.DocumentElement sınıfı XML belgesindeki kök elementi işaret eder. Msgbox xmlbelge.documentElement.xml Daha yukarıdaki satırlarda xmlbelge.xml, belgesinin tamamını gösteriyordu. Buradaki xmlbelge.documentElement.xml ise kök alanına ait bloğu ifade ediyor. Nodename değeri ise elementin (düğümün) adı, yani personel.xml içindeki KISILER ya da kitaplar.xml içindeki KITAPLAR. Dim xmlbelge
Set xmlbelge = CreateObject("MSXML2.DOMDocument")
xmlbelge.async = False
xmlbelge.Load "http://www.chip.com.tr/xml/test/personel.xml"
NodeGoster xmlbelge.documentElement
Sub NodeGoster(node As IXMLDOMNode)
Dim node2 As IXMLDOMNode
For Each node2 In node.childNodes
If node2.nodeType = NODE_ELEMENT Then
MsgBox node2.xml
If node2.hasChildNodes Then NodeGoster node2
End If
Next
End Sub
Yukarıdaki kodu çalıştırdığınızda personel.xml içindeki tüm düğümler, tüm alt düğümler sırasıyla gösterilecek. Koddaki Node adlarına dikkat etmelisiniz. Elementler aynı zamanda bir node (düğüm) olarak adlandırılabilirler. Aslında sadece elementler değil, elemenlerin değerleri de node’dur. HasChildNodes alt tarafta başka node olup olmadığını kontrol ediyor. ChildNodes ise alttaki tüm node’ları. Sadece elementleri listelemek istediğimiz için birinci IF satırında node türünün NODE_ELEMENT olup olmadığını kontrol ettik. Aksi halde elementlerin değerleri Msgbox ile ekranda gösterilecekti. Node nesnelerinin içeriği Text özelliğinde tutuluyor. Bir Node’un değerine erişmek ve değerini değiştirmek için bunu kullanın. MsgBox xmlbelge.documentElement.childNodes(0).childNodes(0).Text Ekteki personel.xml dosyası için yukarıdaki mesaj kutusu Mustafa değerini gösterecektir. Kitaplar.xml dosyası için ise bu değer 1’dir.
Değerleri değiştirmek için Text özelliğini aşağıdakine benzer şekilde kullanın. xmlbelge.documentElement.childNodes(0).childNodes(0).Text= “Murtaza” ChildNodes içinde bu şekilde düğümler uzayıp gidebilir. Herbir düğüm IXMLDOMNode türündedir. Bu türde bir node oluşturup belge içindeki düğümlere daha kısa yoldan ulaşmayı deneyebilirsiniz. Dim node As IXMLDOMNode Node değişkeni xmlbelge’yi doğrudan etkileyeceği için yaptığımız değişiklik xmlbelge’nin içeriğini de değiştirir. Belge içinde yeni düğüm ekleme gibi her türlü işlemi yapabilirsiniz. Aşağıdaki kodda KISI adlı yeni bir NODE ve bunun altında sırasıyla AD, DEPARTMAN, DOGUMYERI adlı alt node’lar CreateNode ile oluşturuluyor ve AppendChild ile düğüm içine ekleniyorlar. Dim yeni As IXMLDOMNode Set yeni = xmlbelge.createNode(NODE_ELEMENT, "KISI", "") Dim alt As IXMLDOMNode Set alt = xmlbelge.createNode(NODE_ELEMENT, "AD", "") alt.Text = "yeni kişi" yeni.appendChild alt Set alt = xmlbelge.createNode(NODE_ELEMENT, "DEPARTMAN", "") alt.Text = "departman" yeni.appendChild alt Set alt = xmlbelge.createNode(NODE_ELEMENT, "DOGUMYERI", "") alt.Text = "dogumyeri" yeni.appendChild alt xmlbelge.documentElement.appendChild yeni Bir düğümü silmek için ise RemoveChild komutunu kullanın. xmlbelge.documentElement.removeChild yeni xmlbelge.documentElement.removeChild xmlbelge.documentElement.childNodes(0) Dim node As IXMLDOMNode Set node= xmlbelge.documentElement.childNodes(0) node.removeChild node.childNodes(0) DOSYALAR: Serkan ŞAHİNOĞLU |
|||||||||||||||||||||||||||||||||||||||