Xml

Xml ve Xls

14.Ocak.2007 Asp.net C# Xml

Bir uygulama düşünün ki veriler xml dosyasında sunum ise web formunda olsun.

İşte tam aradığımız kontrol;

<asp:Xml ID="Xml1" runat="server" DocumentSource="~/App_Data/anket.xml" TransformSource="~/App_Data/Anket.xslt"></asp:Xml>

Verileri Xml dosyasında saklamının avantajlarından birisi de Xslt ile web uygulamalarına kolayca adapte edilebilmesidir. Örnek Xml verisi için Xslt kodu;

<?xml version="1.0" encoding="utf-8"?>
   <
xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
      <
xsl:template match="/">
         <
div id="header">
            ANKET SONULARI

         </
div>
         <
hr />
         <
xsl:call-template name="anket_oy" />
      </
xsl:template>
   <
xsl:template name="anket_oy">
   <
xsl:variable name="toplamOy" select="sum(Anket/cevap)" />
   <
table border="0" cellspacing="1" cellpadding="1" width="100%" id="votes">
      <
tr>
         <
th colspan="2">
            <
xsl:value-of select="Anlet/@ad"/>
            <
br/>
            <
br/>
         </
th>
      </
tr>
      <
xsl:for-each select="Anket/cevap">
      <
tr>
         <
td>
         </
td>
         <
td>
            <
xsl:value-of select ="@text"/>
         </
td>
      </
tr>
      <
tr>
         <
td width="25%">
            <
xsl:variable name="Toplam" select=". * 100 div $toplamOy" />
            % <xsl:value-of select="format-number(. * 100 div $toplamOy,'0')" />
         </
td>
         <
td>
            <
xsl:variable name="Toplam" select=". * 100 div $toplamOy" />
            <
img src="images/anket.png" height="10" width="{$Toplam}%" />
         </
td>
      </
tr>
      </
xsl:for-each>
   </
table>
   </
xsl:template>
</
xsl:stylesheet>

ve sonuç;

Anket

Uzun zamandır Strong Type DataSet kullanmadığımdan basit bir uygulama yazmak belki bir kaç yenilik varsa da görmek istedim. Dataset içine basit birkaç data girebileceğim DataTable ekledim. Sql Server ile uğraşmamak için data kaynağı olarak xml' i uygun gördüm. Daha sonra aklıma keşke içi dolu bir xml dosyası olasa da test işlemlerini hemen yapsam.
Visual Studio 2008 kullanıyorsanız eğer Xml Schema Explorer penceresini bilirsiniz. O pencerede DataTable' a sağ tıklarsanız tam aradığım şey ile karşılaşırsınız.

Generate Sample XML
Generate Xml

Sonuç;
Xml Sample

Şöyle bir düşündüğümüzde veritabınında bulunan herhangi bir tablonun verilerini Xml biçiminde dosyaya yazmanın kaç yolu vardır acaba? Sabahları genelde işe erken gelirim, 1.5 saat kadar :).
Oturdum bir kaç örnek yaptım, paylaşıyorum tüm dünya ile. (Özgüvenin tavan yaptığı an)

Aklıma gelen ilk yöntem DataTable nesnesini kullanmak. Bu nesneyi sadece yazmak için kullanmak kaynak tüketimi açısından çok iyi bir seçim olmaz fakat kullanım kolaylığı açısında tercih edilebilir.

DataBase 2 Xml
 

Diğer bir yöntem ise henüz Veri Katmanında (DataLayer) iken oracıkta xml formatına dönüştürüp XmlTextWriter ile cayır cayır yazmak.

DataBase 2 Xml

Son yöntem ise daha önce şu yazıda kullandığım teknik ile (attribute yerine bu sefer node kullandım) XDocument ile manuel olarak xml dosyasını oluşturmak. Sanırım en zoru bu. Yanlış anlaşılmasın benim için kolay da hani ilk yapan için diyorum.

DataBase 2 Xml

Xslt ile çalışıyorsanız bir kaç küçük ayrıntı.
- Xml verilerini sıralamak için for-each kalıbına

Xslt Sort

yazmak yeterli.
- Satırları ardışık olarak renklendirmek için de mod operatörü ve position() fonksiyonu bu işin üstesinden gelecektir.

Xslt If

Kodun tamamı;

Cities

Xml verisinin devamı için tıklayın...

Xslt Doviz

Daha önceki "Web Sitemiz .." başlıklı bir kaç yazımda Web Part' lar hazırlamıştım.
Yeni bir kontrol daha; Tcmb günlük döviz bilgileri.

Uygulamayı indirmek için tıklayın.

Kullanım kolaylığı için 2 adet özellik eklendi. design

Bu tip uygulamaları yaparken kaynağın kopyası üzerinde çalışmayı tercih ederim. Hız açısından.

Döviz Bilgisi

Döviz Kontrol

Data kaynağınız xml olduğunda okuma veritabanından okumak kadar kolay olmayabilir. XmlDataSorce ile bu işlem çok kolay hale getirebilir.

Repeater

Kodu biraz inceleyelim;
XmlDataSource nesnesinin DataFile özelliği (xml) data kaynağının yolunu ister. Bu disk üzerinde bir dosya olabileceği gibi bir rss dökümanı da olabilir.
Önemli olan DataFile ile belirttilen (xml) data içinden ne istenildiğidir. Bunu yapmanın en pratik yolu xpath kullanmak olacaktır.
XmlDataSource nesnesinin XPath özelliği ile de bunu belirtmek gerekir.

xml

Data kaynağını belirttikten sonra bunu gösterecek bir kontrole ihtiyaç var. Benim seçimim Repeater olacak. (DataList yada Grid de kullanılabilir). ItemTemplate içinde göstermek istenilen node adı XPath metoduna parametre olarak verilir ve değeri gösterilir.

Örnek proje.