C# da XML Okuma ve Yazma

Bu makalede, C# dilini kullanarak XML belgeleri okumak ve yazmanın nasıl olduğunu görücez. 
XML Belgelerini Okuma
Benim örnek uygulamamda, ben XmlTextReader aracılığıyla veri okumak ve göstermek üzere books.xml kullanıyorum. Bu dosya VS.NET örnekleri ile birlikte geliyor. Eğer makine üzerinde bu arama ve aşağıdaki satırdaki dosyanın yolunu değiştirebilirsiniz:  
XmlTextReader TextReader = new XmlTextReader ("C: \ \ books.xml"); 
Ya da herhangi bir XML dosyasını kullanabilirsiniz.  
XmlTextReader, XmlNodeReader ve XmlValidatingReader sınıfları XmlReader sınıf türetilmiştir. XmlReader yöntemleri ve özellikleri yanında, bu sınıflar da sırasıyla metin okuma üyeleri, node ve şemalar içerir. Ben bir XML dosyasını okumak için XmlTextReader sınıfı kullanıyorum 
XmlTextReader TextReader = new XmlTextReader ("C: \ \ books.xml"); 
belgeyi okumaya başlamak için XmlTextReader bir örneğini oluşturduktan sonra, Oku çağrı yöntemi. Okuma yöntemi denir sonra, bir belge içinde tüm bilgi ve veriyi okuyabilir. XmlReader sınıfı, Adı, BaseURI, Derinlik, LineNumber bir benzeri gibi özellikleri vardır. 
Liste 1 bir belge okur ve bu özelliklerini kullanarak bir node bilgileri görüntüler.  
Örnek Örnek 1  
Bu örnek örnekte, XmlTextReader kullanarak bir XML dosyasını okumak ve dosya sonuna kadar biri tarafından da node bir okuyun ve konsolun çıkış içeriğini görüntülemek için yöntem okuyun diyoruz.  
Örnek 1.


using System;
using System.XML;
namespace ReadXml1
{
    sınıf Class1
    {
        static void Main (string [] args)
        {
            / /bir XmlTextReader oluşturun ve dosyayı okumak için yöntem Read yani Oku

            XmlTextReader TextReader = new XmlTextReader ( "C: \ \ books.xml" );
            textReader.Read ();
            / / node değeri varsa
            if (textReader.Read ())
            {
                / / ilk elemanı taşı
                textReader.MoveToElement ();
               Console.WriteLine (. "XmlTextReader Özellikler Test" );
               Console.WriteLine ( "===================" );
                / / Bu elemanın özelliklerini okuyun ve konsolda bunları görüntüler
               Console.WriteLine ( "Adı:" + textReader.Name);
               Console.WriteLine ( "Temel URI:" + textReader.BaseURI);
               Console.WriteLine ( "Yerel Adı:" + textReader.LocalName);
               Console.WriteLine ( "Öznitelik Sayısı:" + textReader.AttributeCount.ToString ());
               Console.WriteLine ( "Derinlik:" + textReader.Depth.ToString ());
               Console.WriteLine ( "Satır sayısı:" + textReader.LineNumber.ToString ());
               Console.WriteLine ( "node Türü:" + textReader.NodeType.ToString ());
               Console.WriteLine ( "Öznitelik Sayısı:" + textReader.Value.ToString ());
            }
        }
    }
}
 

XmlTextReader ve NodeType özelliği, bir belgenin içerik türünü bilmek istediğiniz zaman önemlidir. XMLNodeType numaralandırma vb XML gibi Öznitelik öğe olarak, CDATA, Element, Yorum, Belge, DocumentType, Varlık, ProcessInstruction, boşluk ve her tür için bir üyesi var.

Liste 2 kod örneği, XML belgesi okuyan bir node türünü bulur ve bir belgeye sahiptir kaç node tipleri ile sonunda bilgi yazıyor. 


Örnek Örnek 2 Hakkında

Bu örnek örnekte, XmlTextReader kullanarak bir XML dosyasını okumak ve dosya sonuna kadar biri tarafından da node bir okuma yöntemi okuyun diyoruz. Bir node okuduktan sonra, ben node bulmak ve konsola node içeriği yazmak ve nodeların belirli tip numarası takip etmek için onun node Türü özelliğini kontrol edin. Sonuç olarak, I belgesinde nodeları farklı tipte toplam sayısı gösterir.

Örnek Örnek 2.


Using System;
Using System.XML;
namespace ReadingXML2
{
   class Class1
    {
        static void Main ( string [] args)
        {
            int ws = 0;
            int pi = 0;
            int dc = 0;
            int cc = 0;
            int ac = 0;
            int et = 0;
            int El = 0;
            int xd = 0;
            / / Bir belgeyi okuyun
            XmlTextReader TextReader = new XmlTextReader ( "C: \ \ books.xml" );
            / / Dosya sonuna kadar oku
            if (textReader.Read ())
            {
                XMLNodeType nType = textReader.NodeType;
                / / Eğer node türü bize bir deklarasyon
                if (nType == XMLNodeType . XmlDeclaration)
                {
Console. WriteLine ( "Deklarasyonu:" + textReader.Name.ToString ());
                    xd xd = + 1;
                }
              // node türü bir yorumdur / /
  
                if (nType == XMLNodeType . Yorum)
                {
                   Console.WriteLine ( "Yorum:" + textReader.Name.ToString ());
                    cc = cc + 1;
                }
                / / Eğer node türü bize bir öznitelik
                if (nType == XMLNodeType . Öznitelik)
                {
                   Console. WriteLine ( "Öznitelik:" + textReader.Name.ToString ());
                    ac = ac + 1;
                }
              // node türü bir unsurdur / / if
                if (nType == XMLNodeType . Element)
                {
                   Console.WriteLine ( "Eleman:" + textReader.Name.ToString ());
                    el = el + 1;
                }
                / / Eğer node türü bir varlıktır \
                if (nType == XMLNodeType . Kişi)
                {
                   Console.WriteLine ( "İdare:" + textReader.Name.ToString ());
                    et = et + 1;
                }
              // node türü Süreç Talimat ise / / if
                if (nType == XMLNodeType . Kişi)
                {
                   Console.WriteLine ( "İdare:" + textReader.Name.ToString ());
                    pi = pi + 1;
                }
                / / node türü bir belge varsa
                if (nType == XMLNodeType . DocumentType)
                {
                   Console.WriteLine ( "Belge:" + textReader.Name.ToString ());
                    dc = dc + 1;
                }
               //node türü boşluk olduğu / / if
                if (nType == XMLNodeType . Boşluk)
                {
                   Console.WriteLine ( "boşluk:" + textReader.Name.ToString ());
                    ws ws = + 1;
                }
            }
            / / Özet yazın
           Console.WriteLine ( "Toplam Yorum:" + cc.ToString ());
           Console.WriteLine ( "Toplam Nitelikler:" + ac.ToString ());
           Console.WriteLine ( "Toplam Elements:" + el.ToString ());
           Console.WriteLine ( "Toplam Varlık:" + et.ToString ());
           Console.WriteLine ( "Toplam İşlem Talimatları:" + pi.ToString ());
           Console.WriteLine ( "Toplam Deklarasyonu:" + xd.ToString ());
           Console.WriteLine ( "DocumentType Toplam:" + dc.ToString ());
           Console.WriteLine ( "Toplam whitespaces:" + ws.ToString ());
        }
    }
}

XML belgeleri Yazma
XmlWriter sınıfı XML belgeleri yazmak için işlevselliğini içerir. Bu XmlTextWriter ve XmlNodeWriter sınıfları aracılığıyla kullanılan soyut bir temel sınıftır. XML belgeleri yazmak için yöntemleri ve özellikleri içerir. Bu sınıf, bir XML belgesinin öğe her türlü yazmak için birkaç Writexxx yöntemi vardır. Örneğin, WriteNode, WriteString, WriteAttributes, WriteStartElement ve WriteEndElement bunlardan bazıları. Bu yöntemlerden bazıları, bir başlangıç ve bitiş çifti kullanılmaktadır. Örneğin, bir öğe yazmak için, WriteEndElement takip yazmasını sonra WriteStartElement aramak gerekiyor.              

Birçok yöntemlerinin yanı sıra, bu sınıfın üç özelliği vardır. WriteState, XmlLang ve XmlSpace. WriteState durumunu alır ve ayarlar XmlWriter sınıfı . 

, Burada tüm Writexxx yöntemleri tarif etmek mümkün değil de, en bazılarını görelim.

Yapmamız gereken ilk şey yapıcı kullanarak XmlTextWriter bir örneğini oluşturmak. XmlTextWriter bir dize, akarsu veya argüman olarak bir TextWriter alabilir üç yüklenmiş Kurucular vardır. \ Kök: Biz C oluşturmak için gidiyoruz bir argüman gibi bir dize (dosya adı) geçeceğiz.

\ \ Kök dizin: Benim örnek örnekte, C bir dosya myXmlFile.xml oluşturun. 

/ / C'de yeni bir dosya oluşturun: \ \ dir 
XmlTextWriter TextWriter = new XmlTextWriter ("C: \ \ myXmFile.xml", boş )

bir örneğini oluşturduktan sonra, ilk şey bize WriterStartDocument arayın. Eğer yazı bittiğinde, size WriteEndDocument ve TextWriter Kapanış yöntemini çağırın.


textWriter.WriteStartDocument (); 
textWriter.WriteEndDocument (); 
textWriter.Close ();  

WriteStartDocument ve WriteEndDocument yöntemleri yazmak için bir belge açın ve kapatın. Bunu için başlangıç yazmadan önce bir belgeyi açmak için olmalıdır. WriteComment yöntemi bir belgeye yorum yazıyor. Bu argüman tek bir dize türü alır. WriteString yöntemi bir belge için bir dize yazar. WriteString, WriteStartElement ve WriteEndElement yöntemler yardımıyla çifti belgeye bir eleman yazmak için kullanılabilmektedir. WriteStartAttribute ve WriteEndAttribute çifti bir öznitelik yazar.

WriteNode belgenin bir node olarak bir belge için bir XmlReader yazar daha yazma yöntemidir. Örneğin, bir belgenin ProcessingInstruction ve DocType öğeleri yazmak WriteProcessingInstruction ve WriteDocType yöntemleri kullanabilirsiniz. 

/ / ProcessingInstruction node yaz
dize PI = "type =" text / xsl 'href =' book.xsl '" 
; textWriter.WriteProcessingInstruction ("xml-stylesheet", PI) 
/ / DocumentType node yaz Eş 
textWriter.WriteDocType (" <! ENTITY h 'kapaklı'> kitap ", Nothing, Nothing," ");

aşağıdaki örnek örnek tüm bu yöntemleri özetler ve bu öğeleri, öznitelikleri, dizeleri, yorum vb gibi bazı öğeleri ile yeni bir XML belge oluşturur . Listeleme 5-14 bakın. \ XmlWriterText.xml: Bu örnek örnekte, c yeni bir xml dosyası oluşturun. Bu örnek örnekte, biz yeni bir xml dosyası oluşturmak c: \ XmlTextWriter kullanarak xmlWriterTest.xml: 

Ondan sonra biz Writexxx yöntemlerle belgeye yorum ve öğeleri ekleyin. Biz XmlTextReader kullanarak bizim books.xml xml dosyası okumak ve XmlTextWriter kullanarak xmlWriterTest.xml onun unsurları eklediğiniz sonra.

Örnek Örnek 3 Hakkında  

Bu örnek örnekte, ben XmlTextWriter kullanarak yeni bir dosya myxmlFile.xml oluşturmak ve XML öğeleri yazmak için çeşitli yazma yöntemleri kullanın. 

Örnek Örnek 3.

using System;
using System.XML;
namespace ReadingXML2
{
    class Class1
    {
        static void Main ( string [] args)
        {
            / / C'de yeni bir dosya oluşturun: \ \ dir
            XmlTextWriter TextWriter = new XmlTextWriter ( "C: \ \ myXmFile.xml" , boş );
            / / Belge açar
            () textWriter.WriteStartDocument;
            / / Yorum Yaz
            textWriter.WriteComment ( "İlk yorum XmlTextWriter Örnek Örnek" );
            textWriter.WriteComment ( "kök dir myXmlFile.xml" );
            / / Ilk eleman yaz
            textWriter.WriteStartElement ( "Öğrenci" );
            textWriter.WriteStartElement ( "r" , "RECORD" , "urn: Kayıt" );
            / / Sonraki elemanı yaz
            textWriter.WriteStartElement ( "Adı" , "" );
            textWriter.WriteString ( "Öğrenci" );
            textWriter.WriteEndElement ();
            / / Bir tane daha eleman yaz
            textWriter.WriteStartElement ( "Adres" , "" ); textWriter.WriteString ( "Koloni" );
            textWriter.WriteEndElement ();
            / / WriteChars
            Char [] ch = new Char [3];
            ch [0] = 'a' ;
            ch [1] = 'r' ;
            ch [2] = 'c' ;
            textWriter.WriteStartElement ( "Char" );
            textWriter.WriteChars (CH, 0, ch.Length);
            textWriter.WriteEndElement ();
            / / Belge sonlandırır.
            () textWriter.WriteEndDocument;
            / / Yakın yazar
            () textWriter.Close;
        }
    }
}
 

XmlDocument kullanarak

XmlDocument sınıfını bir XML belgesi temsil eder. Bu sınıf, biz bu makalede daha önce ele aldık benzer yöntemler ve özellikler sağlar. 

Yük ve LoadXml bu sınıfın iki yararlı yöntemlerdir. Bir dizeden bir Load yöntemi yükler XML veri akışı, TextReader veya XmlReader. Belirtilen dize LoadXml yöntemi yükler XML belgesi. Bu sınıfın başka bir yararlı yöntem olduğunu kaydet. Bir dize, dere, TextWriter veya XmlWriter için XML veri yazabilirsiniz yöntemini kullanarak kaydedin.

Örnek Örnek 4 Hakkında

anlamak Bu küçücük örnek örnek oldukça kolay. Biz bir XML parçası yüklemek ve bir XML dosyası olarak fragmanı kaydetmek için Kaydet'i aramak için XmlDocument LoadXml yöntemini çağırın. 

. Örnek Örnek 4 

. / / XmlDocument oluşturma 
XmlDocument doc = new ) (XmlDocument; 
doc.LoadXml (("<Student type='regular' Section='B'> <Adı> Tommy 
ex </ Ad> </ Öğrenci> ")); 
/ / bir dosyaya kaydedin. 
doc.Save ("C: \ \ std.xml"); 
Ayrıca konsol içeriğini görüntülemek için yöntem kaydet kullanabilirsiniz eğer siz Console.Out geçmek gibi bir 
arameter. Örneğin: 
doc.Save (Console.Out);

Hakkında Örnek Örnek 5  

İşte XmlTextReader kullanarak bir XML belge yüklemek için nasıl bir örnektir. Bu örnek örnekte, XmlTextReader kullanarak Books.xml dosya okuma ve Read yöntemini çağırın. Bundan sonra XmlDocumetn Load yöntemi XmlDocument için XmlTextReader içeriğini yüklemek ve belgeyi kaydetmek için kayıt yöntemini çağırarak. Kaydet yöntemi argüman olarak Console.Out Passing konsol üzerindeki verileri görüntüler

Örnek Örnek 5. 

XmlDocument doc = new ) (XmlDocument; 
/ / son kitap node ü ile doküman yükleyin. 
XmlTextReader reader = new XmlTextReader ("c: \ \ books.xml"); 
reader.Read (); 
/ / yük okuyucu 
doc.Load (okuyucu); 
konsolda / / Ekran içerikleri 
doc.Save (Console.Out); 

bir XML belgesi için bir veritabanından veri yazma

, XML ve ADO.NET modu kullanarak bir veritabanı okuma ve bir XML belge yazma tam tersi büyük bir anlaşma değildir. Bu makalenin bu bölümünde, bir veritabanı tablosunun veri okumak ve bir XML belge içeriğini yazmak göreceğiz. 

DataSet sınıfı bir ilişkisel veritabanı tablo okuma ve bir XML dosyası için bu tabloyu yazmak için bir yöntem sağlar. Siz bir XML dosyasına bir dataset veri yazmak için WriteXml yöntemini kullanın.  

Bu örnek örnekte, ben kullandım sık kullanılan Northwind veritabanını Office 2000 ve sonraki sürümleri ile birlikte geliyor. İstediğiniz herhangi bir veritabanını kullanabilirsiniz. Yapmanız gereken tek şey sadece bölümde bağlantı dizesi ve SQ L sorgu SEÇ olduğunu. 

Örnek Örnek 6 Hakkında  

 Bu örnekte, bir veri bağdaştırıcısı nesnesi REATE ve Müşteriler tablosunun tüm kayıtları seçer. Bundan sonra veri adaptörü bir dataset doldurmak için yöntem doldurabilirsiniz. 

Bu örnek, Örnek olarak, I OldDb verilerini sağlar kullanılmıştır. Kendi programında OldDb veri adaptörler kullanmak Syste.Data.OldDb ad başvuru eklemeniz gerekir. Eğer Örnek Örnek 6 görebileceğiniz gibi, ilk ben OldDbConnection kullanarak Northwind veritabanı ile bir bağlantı oluşturun. Bundan sonra bir SELECT SQL sorgusu ve bağlantı geçirerek bir veri adaptörü nesnesi oluşturun. Bir veri adaptörü var, veri adaptörünün Dolgu yöntemi kullanarak bir veri kümesi nesnesi doldurabilirsiniz. Sonra bir XML belge oluşturur DataSet, yöntemi WriteXml ve XML belge içeriğini yazabilirsiniz. Bizim örnek olarak, Müşteriler tablosundaki kayıtları okuyabilir ve C dosya OutputXml.Xml için DataSet içeriğini yazmak: \ dir. 

Örnek 6 Örnek. 

using System;
using System.XML;
using System.Data;
using System.Data.OleDb;
namespace ReadingXML2
{
   Class Class1
    {
        static void Main ( sting [] args)
        {
            / / Bir bağlantı oluşturmak
            OleDbConnection con = new OleDbConnection ();
            con.ConnectionString = "Provider = Microsoft.Jet.OLEDB.4.0; Data Source = C: \ \ Northwind.mdb" ;
            / / Veri adaptörü oluşturmak
            OleDbDataAdapter da = new OleDbDataAdapter ( "Müşteriler Select * from" , con);
            / / Yeni bir veri kümesi oluşturmak
            DataSet ds = new DataSet ();
            / / Veri kümesi dolduracak
            da.Fill (ds, "Müşteriler" );
            / / WriteXml yöntemini çağırarak bir xml dosyasına veri kümesi içeriğini yazmak
            ds.WriteXml ( "C: \ \ OutputXML.xml" );
        }
    }
}

Özet

. NET Framework Kütüphanesi XML belgeleri ile çalışmak için iyi bir destek sağlar. XmlReader, XmlWriter ve türetilmiş sınıflar XML belgeleri okuma ve yazma yöntemleri ve özellikleri içerir. XmlDocument ve XmlDataDocument sınıfların yardımı ile, belgenin tamamını okuyabilirsiniz. Yük ve XmlDocument yükleri bir okuyucu ya da bir dosyanın yöntem kaydedin ve sırasıyla belgeyi kaydeder. ADO.NET veritabanı okuma ve veri sağlayıcıları ve bir DataSet nesnesini kullanarak XML belge içeriğini yazmak için işlevsellik sağlar.

Bu makale şu konularla ilgili olabilir : C ile XML belgesi oluşturma - XML yazmak Oku - C - XML Okuma - Kaydet XML - Güncelleme XML - C Yaz XML -
Yorumlar
comment
merve
2013-05-15
İyi Günler, Xml den çektiğim verileri datagirdviewde görüntülüyorum ancak xml'e ilk eklenen kayıt grdiviewde en üstte son eklenen kayıt en altta gözüküyor. Ben xml e son eklenen kaydı en üstte nasıl görüntüleyebilirim. <-Diagnostics>- <-CSEvent> <-CSName>Şube A<-/CSName> <-Event>OFFLINE<-/Event> <-Timestamp>08:36:26<-/Timestamp> <-Date>03.05.2013<-Date> <-/ECSEvent>- <-CSEvent> <-CSName>Şube A<-/ECSName> <-Event>OFFLINE<-/Event> <-Timestamp>08:36:31<-/Timestamp> <-Date>03.05.2013<-/Date> <-/CSEvent> XML bu şekildedir.