Cara Membaca XML dalam C#

Cara Membaca Xml Dalam C



Format data yang digunakan secara meluas untuk perkongsian data internet ialah XML, kerana data boleh disimpan di dalamnya dan ditukar antara sistem dengan cara yang fleksibel dan mesra pengguna. Dalam C#, membaca fail XML adalah tugas biasa, dan rangka kerja .NET menyediakan pelbagai kelas dan kaedah untuk menghuraikan dan membaca fail XML. Siaran ini akan menggunakan rangka kerja.NET untuk membaca XML dalam C#.

Membaca XML dalam C#

Terdapat beberapa cara untuk membaca fail XML dalam C# dan setiap kaedah mempunyai kelebihan dan kekurangannya, dan pilihannya bergantung pada keperluan projek. Berikut ialah beberapa cara untuk membaca fail XML dalam C#:

Berikut ialah kandungan fail XML yang telah saya buat dan akan digunakan untuk demonstrasi dalam kaedah yang akan datang:







< ?xml versi = '1.0' pengekodan = 'utf-8' ? >
< pekerja >
< pekerja >
< ID > 1 ID >
< nama > Sam bosh nama >
< jabatan > Pemasaran jabatan >
< gaji > 50000 gaji >
pekerja >
< pekerja >
< ID > 2 ID >
< nama > Jane Doe nama >
< jabatan > Kewangan jabatan >
< gaji > 60000 gaji >
pekerja >
< pekerja >
< ID > 3 ID >
< nama > James nama >
< jabatan > Sumber Manusia jabatan >
< gaji > 70000 gaji >
pekerja >
pekerja >

1: Menggunakan XmlDocument

Untuk membaca fail XML dalam C#, anda boleh menggunakan kelas XmlDocument atau kelas XDocument, yang kedua-duanya merupakan sebahagian daripada ruang nama System.Xml. Kelas XmlDocument menyediakan pendekatan DOM (Document Object Model) untuk membaca XML, manakala kelas XDocument menyediakan pendekatan LINQ (Language-Integrated Query). Berikut ialah contoh menggunakan kelas XmlDocument untuk membaca fail XML:



menggunakan Sistem;
menggunakan System.Xml;

Program kelas
{
lompang statik Utama ( tali [ ] args )
{
XmlDocument doc = XmlDocument baharu ( ) ;
doc.Muat ( 'pekerja.xml' ) ;

XmlNodeList nod = doc.DocumentElement.SelectNodes ( '/pekerja/pekerja' ) ;

untuk setiap ( Nod XmlNode dalam nod )
{
tali ID = node.SelectSingleNode ( 'ID' ) .InnerTeks;
nama rentetan = nod.SelectSingleNode ( 'nama' ) .InnerTeks;
jabatan rentetan = nod.SelectSingleNode ( 'jabatan' ) .InnerTeks;
gaji rentetan = nod.SelectSingleNode ( 'gaji' ) .InnerTeks;
Console.WriteLine ( 'ID: {0}, Nama: {1}, Jabatan: {2}, Gaji: {3}' , ID , nama, jabatan, gaji ) ;
}
}
}

Kod ini menggunakan kelas XmlDocument untuk memuatkan fail XML dan kaedah SelectNodes untuk mendapatkan semula senarai nod pekerja. Kemudian, untuk setiap nod pekerja, ia menggunakan kaedah SelectSingleNode untuk mendapatkan semula nilai nod anak id, nama, jabatan dan gaji dan memaparkannya menggunakan Console.WriteLine:







2: Menggunakan XDocument

Sebagai alternatif, anda juga boleh menggunakan kelas XDocument untuk membaca fail XML menggunakan pendekatan LINQ, dan di bawah ialah kod yang menggambarkan cara melakukannya:

menggunakan Sistem;

Program kelas
{
lompang statik Utama ( tali [ ] args )
{
XDocument doc = XDocument.Load ( 'pekerja.xml' ) ;

untuk setiap ( Elemen XElement dalam doc.Keturunan ( 'pekerja' ) )
{
int ID = int.Menghuraikan ( unsur.Unsur ( 'ID' ) .Nilai ) ;
nama rentetan = unsur.Unsur ( 'nama' ) .Nilai;
jabatan rentetan = elemen.Elemen ( 'jabatan' ) .Nilai;
int gaji = int.Parse ( unsur.Unsur ( 'gaji' ) .Nilai ) ;
Console.WriteLine ( $ 'ID: {id}, Nama: {name}, Jabatan: {jabatan}, Gaji: {gaji}' ) ;
}
}
}

Fail XML dimuatkan ke dalam objek XDocument menggunakan kaedah XDocument.Load. Elemen 'pekerja' fail XML kemudiannya diambil semula menggunakan teknik Descendants. Untuk setiap elemen, elemen anaknya diakses menggunakan kaedah Elemen dan nilainya diekstrak menggunakan sifat Nilai. Akhirnya, data yang diekstrak dicetak ke konsol.



Ambil perhatian bahawa XDocument tergolong dalam ruang nama System.Xml.Linq, jadi anda perlu memasukkan pernyataan menggunakan berikut di bahagian atas fail C# anda

3: Menggunakan XmlReader

XmlReader ialah cara yang pantas dan cekap untuk membaca fail XML dalam C#. Ia membaca fail secara berurutan, yang bermaksud ia hanya memuatkan satu nod pada satu masa, menjadikannya sesuai untuk bekerja dengan fail XML besar yang sebaliknya sukar dikendalikan dalam ingatan.

menggunakan Sistem;
menggunakan System.Xml;

Program kelas
{
lompang statik Utama ( tali [ ] args )
{
menggunakan ( Pembaca XmlReader = XmlReader.Create ( 'pekerja.xml' ) )
{
sementara ( pembaca.Baca ( ) )
{
jika ( reader.NodeType == XmlNodeType.Element && pembaca.Nama == 'pekerja' )
{
Console.WriteLine ( 'ID: ' + pembaca.GetAttribute ( 'ID' ) ) ;
pembaca.ReadToDescendant ( 'nama' ) ;
Console.WriteLine ( 'Nama: ' + pembaca.ReadElementContentAsString ( ) ) ;
pembaca.ReadToNextSibling ( 'jabatan' ) ;
Console.WriteLine ( 'Jabatan:' + pembaca.ReadElementContentAsString ( ) ) ;
pembaca.ReadToNextSibling ( 'gaji' ) ;
Console.WriteLine ( 'Gaji:' + pembaca.ReadElementContentAsString ( ) ) ;
}
}
}
}
}

Dalam contoh ini, kami menggunakan XmlReader.Buat kaedah untuk mencipta tika XmlReader dan lulus laluan fail XML sebagai parameter. Kami kemudian menggunakan gelung sementara untuk membaca melalui nod fail XML mengikut nod menggunakan kaedah Baca XmlReader.

Di dalam gelung, kami mula-mula menyemak sama ada nod semasa ialah elemen pekerja menggunakan sifat NodeType dan Name XmlReader. Jika ya, kami menggunakan kaedah GetAttribute untuk mendapatkan semula nilai atribut id.

Seterusnya, kami menggunakan kaedah ReadToDescendant untuk mengalihkan pembaca ke elemen nama di dalam elemen pekerja. Nilai elemen nama kemudiannya diperoleh dengan menggunakan fungsi ReadElementContentAsString.

Begitu juga, kami menggunakan kaedah ReadToNextSibling untuk memindahkan pembaca ke elemen adik-beradik seterusnya dan mendapatkan nilai elemen jabatan dan gaji.

Akhir sekali, kami menggunakan menggunakan blok untuk memastikan objek XmlReader dilupuskan dengan betul selepas kami selesai membaca fail XML:

4: XML kepada LINQ

Membaca fail XML menggunakan LINQ ke XML dalam C# ialah cara yang berkuasa untuk mengakses dan memanipulasi data XML. LINQ kepada XML ialah komponen teknologi LINQ yang menyediakan API yang mudah dan cekap untuk bekerja dengan data XML.

menggunakan Sistem;
menggunakan System.Linq;
menggunakan System.Xml.Linq;

Program kelas
{
lompang statik Utama ( tali [ ] args )
{
XDocument doc = XDocument.Load ( 'pekerja.xml' ) ;

var pekerja = daripada e dalam doc.Keturunan ( 'pekerja' )
pilih baru
{
Id = e.Unsur ( 'ID' ) .Nilai,
Nama = e.Unsur ( 'nama' ) .Nilai,
Jabatan = e.Elemen ( 'jabatan' ) .Nilai,
Gaji = e.Elemen ( 'gaji' ) .Nilai
} ;
untuk setiap ( var pekerja dalam pekerja )
{
Console.WriteLine ( $ 'Id: {employee.Id}, Nama: {employee.Name}, Jabatan: {employee.Department}, Gaji: {employee.Gaji}' ) ;
}
}
}

Dalam kod ini, kami mula-mula memuatkan fail XML menggunakan kaedah XDocument.Load(). Kemudian, kami menggunakan LINQ kepada XML untuk menanyakan data XML dan memilih id, nama, jabatan dan elemen gaji untuk setiap elemen pekerja. Kami menyimpan data ini dalam jenis tanpa nama dan kemudian mengulangi hasil untuk mencetak maklumat pekerja ke konsol.

5: Menggunakan XPath

XPath ialah bahasa pertanyaan yang digunakan untuk menavigasi dokumen XML untuk mencari elemen, atribut dan nod tertentu. Ia adalah alat yang berkesan untuk mencari maklumat dan menapis dalam dokumen XML. Dalam C#, kita boleh menggunakan bahasa XPath untuk membaca dan mengekstrak data daripada fail XML.

menggunakan Sistem;
menggunakan System.Xml.XPath;
menggunakan System.Xml;

Program kelas
{
lompang statik Utama ( tali [ ] args )
{
XmlDocument doc = XmlDocument baharu ( ) ;
doc.Muat ( 'pekerja.xml' ) ;

// Buat XPathNavigator daripada dokumen
XPathNavigator nav = doc.CreateNavigator ( ) ;

// Susun ungkapan XPath
XPathExpression expr = nav.Compile ( '/pekerja/pekerja/nama' ) ;

// Nilaikan ungkapan dan ulangi melalui keputusan
XPathNodeIterator iterator = nav.Select ( expr ) ;
sementara ( iterator.MoveNext ( ) )
{
Console.WriteLine ( iterator.Current.Value ) ;
}
}
}

Kod ini memuatkan fail 'employees.xml' menggunakan XmlDocument, mencipta XPathNavigator daripada dokumen dan menyusun ungkapan XPath untuk memilih semua elemen di bawah elemen . Ia kemudian menilai ungkapan dan melelaran melalui keputusan, mencetak nilai setiap elemen .

Catatan: menggunakan XPath boleh menjadi cara yang berkuasa dan fleksibel untuk memilih elemen dan atribut daripada dokumen XML, tetapi ia juga boleh menjadi lebih kompleks daripada beberapa kaedah lain yang telah kami bincangkan.

Kesimpulan

Menggunakan kelas XmlDocument menyediakan keupayaan manipulasi DOM penuh, tetapi ia boleh menjadi lebih perlahan dan lebih intensif memori daripada kaedah lain. Kelas XmlReader ialah pilihan yang baik untuk membaca fail XML yang besar, kerana ia menyediakan pendekatan berasaskan aliran yang pantas, ke hadapan sahaja dan bukan cache. Kelas XDocument menyediakan sintaks yang lebih ringkas dan ringkas, tetapi ia mungkin tidak berprestasi seperti XmlReader. Selain itu, kaedah LINQ kepada XML dan XPath menyediakan keupayaan pertanyaan yang berkuasa untuk mengekstrak data tertentu daripada fail XML.