Saya melihat artikel di Internet dan mencobanya sendiri. Benar saja, XMLTextReader lebih cepat!
Kelas XMLTextReader yang termasuk dalam namespace System.XML dari .NET Framework dapat dengan cepat membaca data dari file XML tanpa terlalu menuntut sumber daya sistem. Gunakan kelas XMLTextReader untuk membaca data dari file XML dan mengubahnya menjadi format HTML untuk keluaran di browser.
Sebelum membaca artikel ini, pembaca perlu memahami beberapa pengetahuan dasar: XML, HTML, bahasa pemrograman C#, dan beberapa pengetahuan tentang .NET, khususnya framework ASP.NET.
Kerangka kerja .NET Microsoft memberikan banyak kemudahan pengembangan kepada pengembang. Seiring dengan semakin pentingnya XML, pengembang menantikan pengembangan seperangkat alat XML yang canggih. Kerangka .NET telah memenuhi harapan kami dan mengatur kelas-kelas berikut untuk XML dalam namespace System.XML:
XMLTextReader------Menyediakan akses cepat, satu arah, dan tanpa buffer. (Satu arah berarti Anda hanya dapat membaca file XML dari depan ke belakang, bukan terbalik)
XMLValidatingReader------Digunakan dengan kelas XMLTextReader, ini menyediakan kemampuan untuk memverifikasi skema DTD, XDR dan XSD.
XMLDocument------mengikuti standar primer dan sekunder spesifikasi Model Objek Dokumen W3C untuk mencapai akses acak dan cache ke data XML. Level pertama berisi bagian paling dasar dari DOM, sedangkan level kedua menambahkan berbagai perbaikan, termasuk menambahkan dukungan untuk namespace dan cascading chart (CSS).
XMLTextWriter------Hasilkan file XML yang sesuai dengan spesifikasi W3C XML 1.0.
Artikel ini terutama membahas tentang XMLTextReader kelas satu. Tujuan dari kelas ini adalah untuk membaca data dari file XML dengan cepat tanpa menuntut banyak sumber daya sistem (terutama termasuk memori dan waktu prosesor). Di bawah kendali program induk, ia mengimplementasikan proses kerja ini dengan mengoperasikan file XML secara bertahap dengan hanya memproses satu node pada satu waktu. Di setiap node file XML, program induk dapat menentukan tipe node, atribut dan datanya (jika ada), serta informasi lain tentang node tersebut. Berdasarkan informasi ini, program induk dapat memilih apakah akan memproses node ini atau mengabaikan informasi node untuk memenuhi kebutuhan berbagai permintaan aplikasi. Ini disebut model pemrosesan tarik karena program induk membuat permintaan dan mengekstrak masing-masing node dari file XML dan kemudian memprosesnya atau tidak memprosesnya sesuai kebutuhan.
Kita dapat membandingkan kelas XMLTextReader dengan XML Simple Application Programming Interface, atau SAX, yang merupakan teknologi lain untuk membaca data XML yang sangat populer di kalangan pemrogram. XMLTextReader dan SAX sangat mirip karena keduanya dapat dengan cepat membaca data dari file XML tanpa menghabiskan banyak sumber daya sistem. Namun, tidak seperti model ekstraksi XMLTextReader, SAX menggunakan model push: prosesor XML menggunakan "peristiwa" untuk memberi tahu aplikasi host data node mana yang tersedia dan mana yang tidak dapat diperoleh sesuai kebutuhan, program host merespons dengan bereaksi atau mengabaikannya; . Dengan kata lain, data didorong dari pengendali SAX ke host. Pemrogram pasti akan memperdebatkan apakah model pemrosesan pull-out atau push-in memiliki lebih banyak keuntungan, namun tidak dapat disangkal bahwa kedua model bekerja dengan baik. .NET Framework tidak mendukung SAX, namun Anda dapat menggunakan alat SAX yang ada, seperti parser MSXML, dengan aplikasi .NET Anda.
Kelas XMLTextReader memiliki konstruktor untuk mengakomodasi berbagai situasi, seperti membaca data dari aliran data yang ada atau Uniform Resource Locator. Umumnya, Anda mungkin ingin membaca data XML dari sebuah file, dan terdapat konstruktor yang sesuai untuk menyajikannya. Berikut ini contohnya (semua contoh kode saya dalam C#, mudah dikonversi jika Anda lebih suka menggunakan VISUAL BASIC).
XMLTextReader Pembacaku;
myReader = New XMLTextReader("c:datasales.XML")
membuat loop yang disebut metode Read(). Nilai yang dikembalikan dari metode ini selalu benar hingga mencapai bagian bawah file, ketika nilai yang dikembalikan menjadi salah . Dengan kata lain, perulangan dimulai dari awal file dan dibaca di semua node, satu per satu, hingga akhir file tercapai:
While (myReader.Read()) {
...
// Proses setiap node di sini.
...
}
Setelah setiap panggilan sukses ke Read(), program instantiasi XMLTextReader berisi informasi tentang node saat ini (yaitu, node baru saja membaca dari file). Kita dapat memperoleh informasi di atas dari anggota XMLTextReader, seperti yang dijelaskan pada Tabel 1 dan menentukan tipe node saat ini melalui atribut NodeType. Berdasarkan jenis node, kode program dapat membaca data node, memeriksa apakah node tersebut memiliki atribut, dan apakah akan mengabaikannya atau melakukan operasi dan pemrosesan yang sesuai sesuai dengan kebutuhan program.
Saat menggunakan atribut NodeType, penting untuk memahami bagaimana node terkait dengan sel XML. Misalnya, lihat elemen XML berikut:
<city>Chongqing</city>
XMLtextReader menganggap elemen ini sebagai 3 node, dengan urutan sebagai berikut:
1. Tag <city> dibaca sebagai node bertipe XMLNodeType.Element, dan nama elemen "city" dapat diperoleh dari atribut Name XMLTextReader.
2. Data teks "Chongqing" dibaca sebagai node bertipe XMLNodeType.Text. Data "Chongqing" dapat diperoleh dari atribut Value XMLTextReader.
3. Tag </city> dibaca sebagai node bertipe XMLNodeType.EndElement. Demikian pula, nama elemen "kota" tersedia dari properti Nama XMLTextReader.
Ini adalah tiga tipe node penting. Tipe lainnya dijelaskan secara rinci dalam dokumentasi .NET.
Jika XMLTextReader mengalami kesalahan, seperti pelanggaran sintaks XML, ia akan memunculkan pengecualian tipe System.XML.XMLException. Kode yang menggunakan kelas ini harus selalu dilindungi (dalam blok Coba...Tangkap), seperti yang akan Anda lihat nanti di program demo.
Artikel ini hanyalah pengenalan sederhana tentang kelas XMLTextReader. Kelas XMLTextReader memiliki cukup banyak anggota, dan tidak mungkin untuk menyebutkan semuanya di sini. XMLTextReader memberikan fleksibilitas yang besar saat membaca data XML. Meski begitu, saya masih banyak membahas untuk memastikan pembaca dapat menulis program untuk mencapai tugas yang sering dibutuhkan di dunia nyata, yaitu membaca data dari file XML dan kemudian menampilkannya dalam format HTML untuk diimplementasikan di browser. menampilkan.
Program (skrip) ASP.NET ini berjalan di server dan menghasilkan halaman HTML kembali ke browser. Skrip diberikan dalam Cuplikan 1, dan file data XML yang digunakannya diberikan dalam Cuplikan 2. Anda dapat melihat bahwa file XML ini berisi daftar hubungan; tujuan dari program ini adalah untuk menampilkan daftar ini, yang telah diformat untuk memudahkan kita melihatnya.
Jalankan programnya:
1. Simpan cuplikan kode 1 sebagai file XMLTextReader.ASPx dan cuplikan kode 2 sebagai file XMLData.XML.
2. Tempatkan kedua file dalam folder virtual di server web yang telah menginstal .NET Framework.
3. Buka Internet Explorer dan telusuri file ASPx, misalnya di server LAN, URL-nya adalah http://localhost/xmltextreader.ASPx ;.
Sebagian besar pekerjaan program dilakukan oleh kelas XMLDisplay, khususnya dengan metode ProcessXML(). Itu membaca data XML satu node pada satu waktu. Untuk elemen yang diinginkan, data node dan nama node yang diikuti dengan titik dua akan ditulis ke hasil output bersama dengan tag format HTML yang sesuai. Pada tahap ini, “hasil keluaran” terdiri dari objek StringBuilder yang menyimpan teks HTML untuk sementara.
Metode ProcessXML() dipanggil dari metode LoadDocument(). Tugas yang dilakukan oleh metode ini adalah membuat program instantiasi XMLTextReader dan memuat file XML sebelum memanggil ProcessXML. Ini juga menangani pengecualian dan kemudian menghasilkan pesan kesalahan dan menampilkannya di browser. Pada akhirnya metode ini mengembalikan string yang berisi konten HTML yang dihasilkan atau pesan kesalahan jika terjadi pengecualian.
Eksekusi program dimulai dengan program Page_Load(). Saat browser meminta untuk menelusuri halaman ini, langkah ini akan dijalankan secara otomatis. Kode di sini membuat instance kelas XMLDisplay dan memanggil metode LoadDocument()-nya. Jika semuanya berjalan normal, nilai pengembalian HTML yang diformat akan disalin ke tag <div> pada halaman, dan dokumen HTML yang dihasilkan akan dikirim kembali ke browser dan ditampilkan.
Bagaimana kinerja kelas .NET Framework lainnya, seperti kelas XMLDocument, dalam membaca data XML? Kelas XMLDocument berbeda dari kelas XMLTextReader karena kelas ini membuat pohon simpul dari seluruh dokumen XML di memori. Dengan cara ini, data XML dapat diperoleh secara acak (kebalikan dari cara linier kelas XMLTextReader memperoleh data), dan memiliki fleksibilitas sempurna saat memodifikasi data dan struktur file XML. Selain itu, XMLDocument memungkinkan Anda melakukan transformasi XSLT, namun fitur tambahan ini mengorbankan kecepatan berjalan yang lebih lambat dan penggunaan sumber daya sistem yang lebih besar.
Cuplikan kode 1: XmlTextReader.aspx
<%@ Import Namespace="System.Xml" %>
<script Language="C#" runat=server>
public class XmlDisplay
file://Kelas ini membaca dan memproses file XML.
{
string publik LoadDocument(String XmlFileName) {
XmlTextReader xmlReader = nol;
StringBuilder html = StringBuilder baru();
mencoba {
file:// membuat turunan XMLTextReader.
xmlReader = XmlTextReader baru(XmlFileName);
// Memproses file XML
html.Tambahkan(ProcessXml(xmlReader));
}
menangkap (XmlException ex){
html.Append("Terjadi pengecualian XML: " +
mis.ToString());
}
catch (Pengecualian ex){
html.Append("Terjadi pengecualian umum: " +
mis.ToString());
}
Akhirnya
{
jika (xmlReader!= null)
xmlReader.Tutup();
}
kembalikan html.ToString();
}
string pribadi ProcessXml(XmlTextReader xmlReader)
{
StringBuilder temp = new StringBuilder();
file://Metode ini membaca file XML dan menghasilkan dokumen HTML keluaran.
sementara (xmlReader.Baca())
{
// Menangani permulaan node elemen.
if (xmlReader.NodeType == XmlNodeType.Element)
{
file://ignores elemen <people> dan <person>
if ((xmlReader.Nama != "orang") && (xmlReader.Nama != "orang"))
{
file://Jika itu adalah elemen <category>, mulailah paragraf baru
if (xmlReader.Name == "kategori" )
temp.Tambahkan("<p>");
file://menambahkan nama elemen ke output
temp.Append( xmlReader.Name + ": " );
}
}
// Memproses node teks
else if (xmlReader.NodeType == XmlNodeType.Teks)
temp.Append(xmlReader.Value + "<br>");
file:// menangani akhir simpul elemen
lain jika (xmlReader.NodeType == XmlNodeType.EndElement)
{
Jika file:// adalah node <email>, tambahkan tag untuk mengakhiri paragraf.
jika (xmlReader.Nama == "email" )
temp.Tambahkan("</p>");
}
}//Akhiri perulangan while
return temp.ToString();
} file://End ProcessXML metode
} file://End XmlDisplay class
private void Page_Load(Pengirim objek, EventArgs e){
file://Buat sebuah instance dari kelas XmlDisplay
XmlDisplay XmlDisplayDemo = XmlDisplay baru();
keluaran.InnerHtml = XmlDisplayDemo.LoadDocument(Server.MapPath("XMLData.xml"));
}
</skrip>
<html>
<kepala>
</kepala>
<tubuh>
<h2>Demo kelas XmlTextReader</h2>
<div id="output" runat="server"/>
</badan>
</html>
1 kekosongan statis Utama (string[] args)
2 {
3 DateTime d1 =DateTime.Sekarang;
4 XmlDocumentTest();
5 DateTime d2 =DateTime.Sekarang;
6 Rentang Waktu ts =d2-d1;
7
8 Console.WriteLine(ts.TotalMillidetik);
9 Konsol.Baca();
10
11 }
12
13
14 string statis publik XmlFileName = "../../XML/1.xml";
15
16 kekosongan statis pribadi XmlTextReaderTest()
17 {
18 Pembaca XmlTextReader = XmlTextReader baru(XmlFileName);
19 sementara (pembaca.Baca() )
20 {
21 bool keluar =false;
22 saklar (pembaca.NodeType)
dua puluh tiga {
24 kasus XmlNodeType.Elemen:
25 istirahat;
26 kasus XmlNodeType.Teks:
27 jika (pembaca.Nilai=="terakhir")
28 {
29 keluar=benar;
30}
31 istirahat;
32 kasus XmlNodeType.EndElement:
33 istirahat;
34 bawaan:
35 istirahat;
36}
37 jika (keluar)
38 {
39 kembali;
40
41 }
42
43}
44}
45
46 kekosongan statis pribadi XmlDocumentTest()
47 {
48 XmlDocument xd = XmlDocument baru();
49 xd.Muat(XmlNamaFile);
50 Node XmlNode = xd.SelectSingleNode("/people/person[category='last']");
51 Console.Write(node.Nama);
52 }
Ternyata cara pertama memakan waktu lama:
Ternyata yang kedua memakan waktu:
http://www.cnblogs.com/goody9807/archive/2006/10/24/534888.html