Bu yazımızda ASP ile XML dosyalarından nasıl veri alırız bunu işleyeceğiz. XML nedir ne değildir, yapısı nasıldır, nasıl yazılır tüm bunlar için internette yüzlerce örnek bulabilirsiniz. Gerekli bilgiyi buralardan bulabilirsiniz. XML ortak veri değişim standardıdır denir ama bu değişim nasıl yapılır bu konuda bilgi bulmak neredeyse imkansızdır.
Bizde bu yazımızda ASP ile bir XML dosyasından nasıl veri alırız bunu işleyeceğiz.
Öncelikle elimizde içinden veri alacağımız bir XML dosyası olmalı. Yani elimizde olmalı derken içinden veri almayı düşündüğümüz bir XML dosyası var olmalı. Biz bu yazımızda progen firmasının ücretsiz olarak sunduğu hava durumu bilgisi alıp bunu sayfamıza yazdıracağız. Bunun için kullanacağımız adres http://xml.progen.com.tr/havadurumu.php?s=giresun adresi. Bu adresi tarayıcınızda görüntülerseniz aşağıdaki gibi bir yapısı olduğunu görebilirsiniz.
<?xml version="1.0" encoding="ISO-8859-9" ?>
<sehir_adi>Giresun</sehir_adi>
<son_guncelleme>2005-02-22 00:02:59</son_guncelleme>
<tarih>2005-02-22 23:00:00</tarih>
<durum>Az Bulutlu</durum>
<ruzgar>Güneyden Hafif</ruzgar>
</havadurumu>
</PROGEN>
Biz bu sayfaya bağlanıp buradan sitemizde göstermek istediğimiz tarih,durum, sicaklik, nem bilgilerini alacağız.
Öncelikle aşağıdaki gibi bu XML dosyasına MSXML.DOMDocument objesi ile ServerHTTPRequest isteğinde bulunup XML dosyasını yüklüyoruz.
<% set xmlDoc = CreateObject("MSXML.DOMDocument") xmlDoc.async = false xmlDoc.setProperty "ServerHTTPRequest", true xmlDoc.load("http://xml.progen.com.tr/havadurumu.php?s=giresun") %>
Eğer bu işlem sırasında hata oluşmuşsa bunu görüntüleyelim.
<% If (xmlDoc.parseError.errorCode <> 0) then Response.Write "XML Hatası: " & xmlDoc.parseError.reason Else ´Veri alma işlemleri end If %>
Eğer dosyayı kazasız belasız almış isek bunu içinden <havadurumu> ismindeki kanal içindeki alt başlıklardaki(tag) verileri alalım.
<% set channelNodes = xmlDoc.selectNodes("//havadurumu/*")
for each entry in channelNodes if entry.tagName = "tarih" then strTarih = entry.text elseif entry.tagName = "durum" then strDurum = entry.text elseif entry.tagName = "sicaklik" then strSicaklik = entry.text elseif entry.tagName = "nem" then strNem = entry.text end if next
Response.Write "Tarih: " & strTarih & "<br />" Response.Write "Durum: " & strDurum & "<br />" Response.Write "Sıcaklık: " & strSicaklik &"<br />" Response.Write "Nem: " & strNem &"<br />" %>
Evet işlem bu kadar basit. set channelNodes = xmlDoc.selectNodes("//havadurumu/*") diyerek içinden veri alacağınız kanalın adını yazıp sonrada bu kanal içindeki alt tagları kontrol ederek eğer sizin istediğiniz tag ise içindeki değeri alıyorsunuz.
Kodumuzun en son hali şöyle:
URL = "http://xml.progen.com.tr/havadurumu.php?s=giresun"
set xmlDoc = createObject("MSXML.DOMDocument") xmlDoc.async = false xmlDoc.setProperty "ServerHTTPRequest", true xmlDoc.load(URL)
If (xmlDoc.parseError.errorCode <> 0) then Response.Write "XML Hatası: " & xmlDoc.parseError.reason Else
set channelNodes = xmlDoc.selectNodes("//havadurumu/*")
for each entry in channelNodes if entry.tagName = "tarih" then strTarih = entry.text elseif entry.tagName = "durum" then strDurum = entry.text elseif entry.tagName = "sicaklik" then strSicaklik = entry.text elseif entry.tagName = "nem" then strNem = entry.text end if next
Response.Write "Giresunda Hava<br />" Response.Write "Tarih: " & strTarih & "<br />" Response.Write "Durum: " & strDurum & "<br />" Response.Write "Sıcaklık: " & strSicaklik &"<br />" Response.Write "Nem: " & strNem &"<br />"
end If %>
|