Bahasa XML semakin banyak digunakan untuk menyimpan informasi, membagikannya antara aplikasi dan node web. Dalam banyak aplikasi, bahasa ini digunakan sebagai penyimpanan data dasar pada yang lain - untuk mengekspor dan mengimpor data XML. Ini mengikuti dari ini bahwa sekarang saatnya pengembang untuk berpikir tentang cara menggunakan data XML dalam aplikasi Anda sendiri.
Dalam artikel ini kita akan melihat Dokumen XML Object Model (DOM) dan implementasinya oleh Microsoft - Microsoft XML DOM.
XML DOM adalah model objek yang menyediakan objek pengembang untuk mengunduh dan memproses file XML. Model objek terdiri dari objek utama berikut: xmldomdocument, xmldomnodelist, xmldomnode, xmldomnamednodemap dan xmldomparseerror. Masing-masing objek ini (kecuali xmldomparseerror) berisi properti dan metode untuk mendapatkan informasi tentang objek, memanipulasi nilai dan struktur objek, serta bergerak di sepanjang struktur dokumen XML.
Pertimbangkan objek utama XML DOM dan berikan beberapa contoh penggunaannya di Borland Delphi.
Menggunakan XML DOM di Borland Delphi
Untuk menggunakan Microsoft XML DOM dalam aplikasi Delphi, Anda harus menghubungkan tipe pustaka yang sesuai dengan proyek. Untuk Melakukan Ini, Kami Melaksanakan Proyek | Perpustakaan Jenis Impor dan di panel dialog Library Type Import, pilih Perpustakaan Microsoft XML versi 2.0 (versi 2.0), yang biasanya terletak di file Windows \\ System \\ MSXML.dll
Setelah menekan tombol Buat Unit, modul antarmuka MSXML_TLB akan dibuat, yang akan memungkinkan kami untuk menggunakan objek XML DOM: domdocument, xmldocument, xmlhttprequest dan sejumlah lainnya diimplementasikan di perpustakaan MSXML.dll. Tautan ke modul MSXML_TLB harus tercantum dalam daftar penggunaan.
Perangkat XML DOM.
Model objek dokumen mewakili dokumen XML dalam bentuk struktur pohon yang terdiri dari cabang. Antarmuka perangkat lunak XML DOM memungkinkan aplikasi untuk menavigasi pohon dokumen dan memanipulasi cabang-cabangnya. Setiap cabang dapat memiliki tipe tertentu (Domnodetype), menurut induk dan anak perusahaan yang ditentukan. Dalam sebagian besar dokumen XML, Anda dapat menemukan cabang elemen, atribut, dan cabang teks. Atribut (atribut) adalah jenis cabang khusus dan bukan cabang anak perusahaan. Penggunaan manajemen atribut metode Khususdisediakan oleh objek XML DOM.
Selain menerapkan antarmuka Consortium Web Wide Wide Wide yang direkomendasikan, Microsoft XML DOM berisi metode yang mendukung XSL, pola XSL, namespace, dan tipe data. Misalnya, metode SelectNodes memungkinkan Anda untuk menggunakan Sintaks Templat XSL (Sintaks Pola XSL) untuk mencari cabang pada konteks tertentu, dan metode transformnode mendukung penggunaan XSL untuk melakukan transformasi.
Tes Dokumen XML.
Sebagai contoh dokumen XML, ambil katalog CD-ROM musik, yang memiliki struktur berikut:
Sekarang kami siap untuk mulai mempertimbangkan model objek XML DOM, keakraban yang akan dimulai dengan objek XMLDOMDocument.
Dokumen XML - Objek XmldomDocument
Bekerja dengan dokumen XML dimulai dengan unduhannya. Untuk melakukan ini, kami menggunakan metode muat yang hanya memiliki satu parameter yang menunjukkan URL dokumen yang diunduh. Saat mengunduh file dari disk lokal, hanya nama file lengkap yang ditentukan (file: /// protokol dalam hal ini dapat dihilangkan). Jika dokumen XML disimpan sebagai string, metode LoadXML harus digunakan untuk mengunduh dokumen seperti itu.
Untuk mengontrol metode mengunduh dokumen (sinkron atau asinkron), properti Async digunakan. Secara default, properti ini benar, menunjukkan bahwa dokumen tersebut dimuat secara asinkron dan kontrol dikembalikan ke aplikasi bahkan sampai dokumen dimuat sepenuhnya. Jika tidak, dokumen dimuat secara sinkron, dan kemudian Anda harus memeriksa nilai properti readystate untuk mengetahui, dokumen dimuat atau tidak. Anda juga dapat membuat handler event onreadystatechange yang akan menerima kontrol saat mengubah nilai properti ReadyState.
Di bawah ini ditampilkan cara mengunduh dokumen XML menggunakan metode beban:
Pengguna ... msxml_tlb ... prosedur tform1.button1click (pengirim: mengalihkan); Var xmldoc: ixmldomdocument; Mulai xmldoc: \u003d codomdocument.create; Xmldoc.async: \u003d false; Xmldoc.load ('c: \\ data \\ data.xml'); // // di sini adalah kode yang memanipulasi // xml dokumen dan cabangnya // xmldoc: \u003d nihil; akhir;
Setelah dokumen dimuat, kami dapat merujuk ke propertinya. Dengan demikian, properti Nodename akan berisi nilai #document, properti nodetypestring adalah nilai dokumen, properti URL adalah file: /// c: /data/data.xml nilai.
Pemrosesan adalah kesalahan
Yang menarik adalah sifat-sifat yang terkait dengan pemrosesan dokumen saat dimuat. Dengan demikian, properti ParseError mengembalikan objek XMLDOMPARSEEmror yang berisi informasi kesalahan yang terjadi selama proses pemrosesan.
Untuk menulis handler kesalahan, Anda dapat menambahkan kode berikut:
Var xmlerror: ixmldomparseerror; ... xmldoc.load ('c: \\ data \\ data.xml'); Xmlerror: \u003d xmldoc.parseerror; Jika Xmlerror.Errorcode.<> 0 lalu // // Di sini kami memproses kesalahan // lain memo1.lines.add (xmldoc.xml); ... Xmldoc: \u003d nihil;
Untuk mengetahui informasi mana yang dikembalikan jika terjadi kesalahan, ubah item direktori berikut:
melepaskan elemen penutupan
Sekarang tulis kode yang mengembalikan properti dari objek xmldomparseerror:
Xmlerror: \u003d xmldoc.parseerror; Jika Xmlerror.Errorcode.<> 0 kemudian dengan xmlerror, memo1.lines mulai menambahkan ('file:' + url); Tambahkan ('kode:' + inttostr (ERRORCODE)); Tambahkan ('kesalahan:' + Alasan); Tambahkan ('teks:' + srctext); Tambahkan ('baris:' + inttostr (baris)); Tambahkan ('Posisi:' + inttostr (lineepos)); Akhir memo1.lines.add (xmldoc.xml); Akhir;
dan memenuhi aplikasi kami. Akibatnya, kami memperoleh informasi kesalahan berikut.
Seperti yang dapat dilihat dari contoh di atas, informasi yang dikembalikan oleh objek xmldomparseerror sudah cukup untuk melokalisasi kesalahan dan memahami alasan terjadinya.
Sekarang kembalikan elemen penutupan
Akses ke pohon dokumen
Untuk mengakses pohon dokumen, Anda dapat memperoleh elemen root dan kemudian pergi melalui anak perusahaannya, atau menemukan cabang tertentu. Dalam kasus pertama, kami mendapatkan elemen root melalui properti dokumen, yang mengembalikan objek tipe xmldomnode. Di bawah ini ditampilkan cara menggunakan properti dokumen untuk mendapatkan konten setiap elemen anak:
Var node: ixmldomnode; Root: ixmldomelement; I: Integer; ... root: \u003d xmldoc.documentelement; Untuk I: \u003d 0 ke root.Childnodes.length-1 do Begin node: \u003d root.childnodes.Item [i]; Memo1.lines.add (node.text); Akhir;
Untuk dokumen XML kami, kami mendapatkan teks berikut.
Jika kami tertarik pada beberapa jenis cabang spesifik atau tingkat cabang di bawah anak perusahaan pertama, kita dapat menggunakan metode nodefromida atau metode getelementbytagname dari objek XMLDOMDocument.
Metode nodefromida memerlukan spesifikasikan pengidentifikasi unik yang ditentukan dalam skema XML atau definisi tipe dokumen (DTD) dan mengembalikan cabang dengan pengidentifikasi ini.
Metode GetelementByTagne membutuhkan indikasi string dengan elemen tertentu (tag) dan mengembalikan semua cabang dengan item ini. Di bawah ini ditampilkan cara menggunakan metode ini untuk menemukan semua pemain di direktori CD-ROM kami:
Node: ixmldomnodelist; Node: ixmldomnode; ... node: \u003d xmldoc.getElementsBytagname ('artis'); Untuk I: \u003d 0 ke node. Mulai-1 lakukan node mulai: \u003d node.Item [i]; Memo1.lines.add (node.text); Akhir;
Untuk dokumen XML kami, kami akan mendapatkan teks berikut.
Perhatikan bahwa metode Xmldomnode SelectNodes memberikan cara yang lebih fleksibel untuk mengakses cabang dokumen. Tetapi tentang itu sedikit lebih rendah.
Cabang Dokumen - Objek Xmldomnode
Objek xmldomnode adalah cabang dokumen. Kami telah menemukan objek ini ketika elemen akar dari dokumen diperoleh:
Root: \u003d xmldoc.documentelement;
Untuk mendapatkan informasi tentang cabang dokumen XML, Anda dapat menggunakan properti objek Xmldomnode (Tabel 1).
Untuk mengakses data yang disimpan di cabang, biasanya menggunakan properti nodeValue (tersedia untuk atribut, cabang teks, komentar, instruksi untuk pemrosesan dan bagian CDATA), atau properti teks yang mengembalikan konten teks cabang, atau properti nodetypedvalue. Namun yang terakhir, hanya dapat digunakan untuk cabang dengan elemen yang diketik.
Bergerak di pohon dokumen
Objek Xmldomnode menyediakan berbagai cara untuk bergerak melalui pohon dokumen. Misalnya, untuk mengakses cabang induk, properti parentnode digunakan, akses ke cabang-cabang anak dilakukan melalui properti Childnodes (Xmldchild Type), Firstchild dan LastChild (Type Xmldomnode), dll. Properti OwnerDocument mengembalikan objek XmlDocument yang mengidentifikasi dokumen XML itu sendiri. Properti di atas membuatnya mudah untuk bergerak melalui pohon dokumen.
Sekarang saya akan mengatasi semua cabang dokumen XML:
Root: \u003d xmldoc.documentelement; Untuk I: \u003d 0 ke root.Childnodes.length-1 do Begin node: \u003d root.childnodes.Item [i]; Jika node.haschildnodes kemudian getchilds (node, 0); Akhir;
Seperti disebutkan di atas, objek SelectNodes Xmldomnode memberikan cara yang lebih fleksibel untuk mengakses cabang dokumen. Selain itu, ada metode SelectSingLende yang hanya mengembalikan cabang dokumen pertama. Kedua metode ini memungkinkan Anda untuk menentukan templat XSL untuk mencari cabang.
Pertimbangkan proses menggunakan metode SelectNodes untuk mengekstrak semua cabang yang memiliki cabang CD dan inflasi.
Root: \u003d xmldoc.documentelement; Node: \u003d root.selectnodes ('cd / harga');
Koleksi node akan ditempatkan semua Cabang CD Harga Switter. Pembahasan templat XSL akan kembali sedikit kemudian.
Manipulasi oleh cabang anak
Untuk manipulasi anak perusahaan, kita dapat menggunakan metode objek Xmldomnode (Tabel 2).
Untuk sepenuhnya menghapus catatan disk pertama, Anda perlu melakukan kode berikut:
Var xmldoc: ixmldomdocument; Root: ixmldomnode; Node: ixmldomnode; Xmldoc: \u003d codomdocument.create; Xmldoc.async: \u003d false; Xmldoc.load ('c: \\ data \\ data.xml'); // dapatkan root elemen root: \u003d xmldoc.documentelement; Node: \u003d root; // Hapus anak perusahaan pertama node.removeChild (node.firstchild);
Harap dicatat bahwa dalam contoh ini kami menghapus anak perusahaan pertama. Cara menghapus elemen pertama dari anak perusahaan pertama, ditunjukkan di bawah ini:
Var xmldoc: ixmldomdocument; Root: ixmldomnode; Node: ixmldomnode; Xmldoc: \u003d codomdocument.create; Xmldoc.async: \u003d false; Xmldoc.load ('c: \\ data \\ data.xml'); // dapatkan root elemen root: \u003d xmldoc.documentelement; // dan node anak perusahaan pertama: \u003d root.firstchild; // Hapus anak perusahaan pertama node.removeChild (node.firstchild);
Dalam contoh di atas, kami tidak menghapus cabang pertama.
Sekarang tambahkan cabang baru. Di bawah ini adalah kode yang menunjukkan cara menambahkan catatan baru CD-ROM musik:
Var newnode: ixmldomnode; Anak: ixmldomnode; ... // Buat cabang baru -
Kode di atas menunjukkan urutan tindakan berikut untuk menambahkan cabang baru:
- Membuat cabang baru menggunakan Createnode:
- membuat item menggunakan metode createnode;
- menambahkan elemen ke cabang dengan metode appendchild;
- menetapkan nilai elemen melalui properti teks;
- ... ulangi untuk semua item.
- Menambahkan cabang baru ke dokumen oleh Appendchild.
Ingatlah bahwa metode Appendchild menambahkan cabang di ujung pohon. Untuk menambahkan cabang ke tempat spesifik pohon, Anda perlu menggunakan metode insertbefore.
Set cabang - objek xmldomnodelist
Objek Xmlnodelist berisi daftar cabang yang dapat dibangun menggunakan metode SelectNodes atau GetLementsBytagname, dan juga diperoleh dari properti Childnodes.
Kami telah mempertimbangkan penggunaan objek ini dalam contoh yang diberikan pada bagian "bergerak di atas pohon dokumen". Di sini kami juga memberikan beberapa komentar teoritis.
Jumlah cabang dalam daftar dapat diperoleh sebagai nilai panjang properti. Cabang-cabang memiliki indeks dari 0 hingga panjang-1, dan setiap cabang individu tersedia melalui elemen array item dengan indeks yang sesuai.
Bergerak pada daftar cabang juga dapat dilakukan dengan menggunakan metode NextNode yang mengembalikan cabang berikutnya dalam daftar, atau nihil, jika cabang saat ini adalah yang terakhir. Untuk kembali ke bagian atas daftar, Anda harus memanggil metode reset.
Membuat dan Menyimpan Dokumen
Jadi, kami melihat bagaimana Anda dapat menambahkan cabang dan elemen ke dokumen XML yang ada. Sekarang buat dokumen XML "on the fly". Pertama-tama, kami akan mengingatkan Anda bahwa dokumen tersebut dapat dimuat tidak hanya dari URL, tetapi juga dari string yang biasa. Di bawah ini ditampilkan cara membuat elemen root, yang kemudian dapat digunakan untuk membangun elemen yang tersisa secara dinamis (yang telah kami pertimbangkan dalam bagian "Manipulasi Anak Perusahaan"):
Var xmldoc: ixmldomdocument; Root: ixmldomnode; Node: ixmldomnode; S: widestring; ... s: \u003d '
Setelah membangun dokumen XML, simpan di file menggunakan metode Save. Sebagai contoh:
Xmldoc.save ('c: \\ data \\ newcd.xml');
Selain menyimpan dalam file, metode Save memungkinkan Anda untuk menyimpan dokumen XML di objek XMLDOMDocument baru. Dalam hal ini, dokumen ini diproses penuh dan, sebagai hasilnya, memeriksa struktur dan sintaksnya. Di bawah ini ditampilkan cara menyimpan dokumen di objek lain:
Prosedur tform1.button2click (pengirim: mengalihkan); Var xmldoc2: ixmldomdocument; Mulai xmldoc2: \u003d codomdocument.create; Xmldoc.save (Xmldoc2); Memo2.lines.add (xmldoc2.xml); ... Xmldoc2: \u003d nihil; akhir;
Sebagai kesimpulan, kami perhatikan bahwa metode Save juga memungkinkan Anda untuk menyimpan dokumen XML ke objek COM lain yang mendukung antarmuka ISTREAM, ISETSTREAM atau IPESSCREAMINIT.
Menggunakan templat XSL
Membahas metode Xmldomnode ObjectNodes Pilihan, kami menyebutkan bahwa ia memberikan cara yang lebih fleksibel untuk mengakses cabang dokumen. Fleksibilitas terletak pada kenyataan bahwa sebagai kriteria untuk memilih cabang, Anda dapat menentukan templat XSL. Template tersebut menyediakan mekanisme yang kuat untuk mencari informasi dalam dokumen XML. Misalnya, untuk mendapatkan daftar semua nama CD-ROM musik di direktori kami, Anda dapat mengikuti kueri berikut:
Untuk mengetahui apakah disk yang dilakukan oleh pemain mana yang dirilis di Amerika Serikat, permintaan ini terbentuk sebagai berikut:
Node: \u003d root.selectnodes ('cd / artis');
Di bawah ini ditampilkan cara menemukan disk pertama dalam direktori:
Node: \u003d root.selectnodes ('cd / judul');
dan terakhir:
Node: \u003d root.selectnodes ('cd / judul');
Untuk menemukan cakram Bob Dilan, Anda dapat melakukan kueri berikut:
Node: \u003d root.selectnodes ('cd [$ apapun $ arst \u003d "bob dylan"] / judul');
dan untuk mendapatkan daftar disk yang dirilis setelah 1985, kami melakukan permintaan berikut:
Node: \u003d root.selectnodes ('cd / judul');
Diskusi yang lebih rinci tentang Sintaks XSL memerlukan publikasi terpisah. Untuk pembaca intrik dan dorong penelitian lebih lanjut, saya hanya akan memberikan satu contoh kecil dari kemungkinan penggunaan XSL. Misalkan kita perlu mengkonversi direktori kita ke tabel HTML yang biasa. Mengambil keuntungan dari cara-cara tradisional, kita harus memilah semua cabang pohon dan untuk setiap item yang diperoleh untuk membentuk tag yang sesuai
Menggunakan XSL, kami cukup membuat template (atau tabel gaya), di mana kami menunjukkan apa dan bagaimana mengkonversi. Kemudian kami memaksakan template ini ke katalog kami - dan siap: sebelum kami teks templat XSL, yang mengubah direktori di tabel (daftar 2).
Kode untuk overlay templat XSL ke katalog kami terlihat seperti ini:
Prosedur tform1.button2click (pengirim: mengalihkan); Var xsldoc: ixmldomdocument; Mulai xsldoc: \u003d codomdocument.create; Xsldoc.load ('c: \\ data \\ data.xsl'); Memo2.text: \u003d xmldoc.transformnode (xsldoc); XSLDOC: \u003d nihil; akhir;
Dengan menyelesaikan diskusi kami tentang XSL, harus dikatakan bahwa saat ini bahasa ini secara aktif digunakan untuk transformasi antara dokumen XML yang berbeda, serta untuk memformat dokumen.
Kesimpulan
Untuk alasan yang cukup dimengerti, dalam satu artikel tidak mungkin untuk mempertimbangkan semua objek Microsoft XML DOM dan membawa contoh penggunaannya. Di sini kami hanya menyentuh masalah utama menggunakan XML DOM dalam aplikasi. Di tab. 3 menunjukkan semua objek yang diterapkan di Microsoft XML DOM.
ComputerpressPress 12 "2000
Memecahkan tugas tugas di Delphi
Delphi adalah bahasa pemrograman kedua yang dengannya siswa paling sering berkenalan dalam proses pembelajaran. Ini adalah awal dari pembelajaran pemrograman berorientasi objek. Saya, sebagai seorang siswa, dibuat untuk diri saya sendiri kesimpulan bahwa tidak ada metode yang lebih mudah untuk menguasai bahasa daripada menulis kalkulator di atasnya. Bahkan jika Anda menyadari fungsi dasar penambahan dua angka, ini sudah pada banyak cahaya.
Codegaear, Delphi 7, Lazarus adalah kompiler yang berbeda, program yang akan ditransfer ke kode mesin yang ditulis oleh Anda, mengubahnya menjadi Zoliki dan satu. Ini semua adalah program untuk membuat program, dan bukan bahasa pemrograman terpisah. Kompiler ini menggunakan objek bahasa pemrograman pascal yang mendasari bahasa Delphi, yang mirip dengan sintaks yang mirip dengan Pascal yang biasa, tetapi fungsional berbeda secara signifikan.
Apa itu Sintaks Bahasa Pemrograman?
Ini adalah format untuk menulis berbagai operator. Misalnya, siklus "untuk" pada Pascal memiliki format berikut: "Untuk n: \u003d 1 hingga k lakukan", dll.
Dalam bahasa pemrograman C ++, siklus yang sama ditulis agak berbeda: untuk (n \u003d 1; n kami menulis kalkulator
Ini akan memberi Anda memahami bagaimana objek dengan kode program berinteraksi, apa itu "variabel", bagaimana fungsi matematika berfungsi. Semua pemrograman dalam hal apa pun akan menjadi perhitungan. Gim ini juga merupakan program yang terus-menerus mempertimbangkan sesuatu, bekerja dengan angka dan fungsi numerik. Pemrograman tidak dapat dipisahkan dari matematika.
Kami gunakan untuk menulis lingkungan pengembangan Lazarus. Fungsionalitasnya tidak sebesar, katakanlah, bocah kode, tetapi akses gratis dan dirancang untuk dipelajari.
Membuka lingkungan pengembangan, kita melihat bentuk dan panel elemen. Ini formulir.
Ini adalah panel elemen.
Hal pertama yang akan kami lakukan adalah menambahkan tiga item yang Anda butuhkan untuk mengimplementasikan fungsi penambahan dua angka. Kita perlu: "tedit" dalam jumlah tiga potong dan "tbutton". Pada gambar di bawah ini, mereka ditampilkan di panel panah. Klik pada mereka sekali, dan kemudian bentuknya, dan mereka muncul di atasnya.
Ini adalah bidang teks untuk input dan tombol reguler. Anda menemui elemen-elemen ini menggunakan hampir semua program Windows. Lihatlah.
Sekarang bersihkan prasasti ini. Klik tab Lihat. Dan klik pada "Inspektur Objek. Jendela ini akan muncul.
Klik sekali pada elemen kami "tombol" pada formulir dan ubah nilai "Keterangan" di jendela Inspektur ke yang lain. Misalnya, pada kata "OK". Klik Enter. Kami melihat pada formulir, karena elemen telah mengubah nama.
Lakukan saja dengan Edit, jangan ganti nama, tetapi kami akan membuatnya tanpa konten. Kami menyoroti mereka pada gilirannya dan membersihkan nilai teks di inspektur. Jangan lupa untuk menekan Enter.
Menurut hasilnya, formulir kami terlihat seperti ini.
Sekarang kalkulator kami diperoleh, Anda perlu mendaftarkan kode perangkat lunak yang diperlukan untuk prosedur tombol kami. Klik pada elemen tombol dua kali dan buka editor sumber.
Lihat? Prosedur Tombol1Klik. Ini adalah prosedur yang bertanggung jawab atas apa yang terjadi ketika kami mengklik tombol satu kali. Dan berikut ini harus terjadi: Program ini diperlukan dalam edit ketiga untuk membawa kami jumlah angka yang diperkenalkan di dua bidang pertama. Kami menulis kode.
5 baris kode sederhana yang perlu kita tulis. Komentar dan penjelasan terlihat pada gambar di atas. Setelah itu, klik tombol ini.
Kompilasi proyek kami akan dikompilasi. Ini akan dirakit dalam program. Kami memasukkan angka-angka di dua bidang pertama, klik tombol dan dapatkan nilai jumlahnya.
Kesimpulan
Anda dapat mengklik tombol "File", lalu "Simpan semuanya", pilih folder untuk menyimpan dan Anda akan memiliki program lengkap, yang mulai dari desktop. Sekarang cobalah untuk mencari tahu sendiri bahwa Anda perlu menulis ulang dalam kode ini sehingga program akan dibagi dengan dua angka, dan tidak dilipat. Tip: Anda perlu mengubah tipe data. Video di bawah ini menunjukkan contoh yang sama, tetapi di Delphi 7, bukan Lazarus.
Banyak programmer Delphi, pengaturan penghematan dikaitkan dengan menggunakan INI. File dalam program mereka. Penggunaan metode ini, dalam proyek yang kurang serius, perlu untuk menghindari, karena membatasi fleksibilitas, yang mencegah perluasan program lebih lanjut. Perlu mengatakan bahwa pendekatan seperti itu cukup populer, karena kemudahan penggunaannya dan keberadaan dana bawaan pada lingkungan pembangunan.
Namun, opsi ideal untuk menyimpan pengaturan program disusun Xml. File. Keuntungan mereka adalah bahwa jumlah parameter mungkin tidak diperbaiki. Untuk lebih memahami ini, pertimbangkan contoh tertentu.
Dalam program USEVER, ketika Anda mengklik Recording, menu konteks muncul, yang menampilkan daftar poin. Barang-barang ini adalah perintah yang pada gilirannya diunduh dari file pengaturan. Dalam hal pengaturan disimpan di INI. File, program ini dapat menyimpan dan memuat sejumlah perintah tertentu, misalnya 10 atau 50. Segera setelah Anda membutuhkan yang lebih penting, Anda perlu menulis ulang kode dan, sesuai, kompilasi ulang.
Menerapkan pendekatan menggunakan Xml. File, kami akan memiliki kemampuan untuk mengunduh semua parameter bagian secara dinamis. Untuk semua ini, file konfigurasi akan menjadi lebih elegan, tanpa penomoran parameter yang berlebihan. Namun, alat standar untuk bekerja dengan Xml. Delphi memiliki banyak kelemahan, jadi saya sarankan menggunakan pustaka standar MSXML.. Biasanya ini adalah bagian default dari sistem keluarga Windows.
Untuk menghubungkan MSXML.Kita perlu membentuk file antarmuka dengan daftar semua fungsi dengan mengimpornya dari server COM. Cara mengimpor antarmuka ditulis tidak cukup artikel terperinci, saya sarankan Anda mengunduh file Msxml2_tlb.pas. Sudah siap digunakan. Setelah file diunduh, letakkan di sebelah proyek Anda, atau lempar ke folder Delphi Lib Lib. Dengan demikian, semua program yang dibuat akan dapat menggunakan modul. MSXML., Itu cukup untuk menambahkan msxml2_tlb ke penggunaan.
Untuk kejelasan, pertimbangkan contoh aplikasi berikut ini:
Prosedur loaddata; Var xmldoc: domdocument; Root: ixmldomelement; Mulai xmldoc: \u003d codomdocument.create; Xmldoc.load ("setins.xml"); Root: \u003d xmldoc.documentelement; Showmessage ("ukuran / lebar"). Teks); Root: \u003d nihil; Xmldoc: \u003d nihil; akhir;
Pertama, instance dari kelas domdocument dibuat, setelah itu isi file pengaturan.xml dimuat ke dalam memori. Sesuai dengan standar apa pun Xml. File harus berisi tag root (dalam hal ini cONFIG.), maka kita perlu mendapatkannya menggunakan fungsi Dokumentasi.. Kemudian isi konten antar tag
Di sini metode SelectSinglende diterapkan, yang mengambil string sebagai parameter.
Selamat datang! Blog ini dikhususkan untuk internet dan komputer, dan, lebih tepatnya, mereka didedikasikan untuk mereka.
Mungkin itu segera terlihat bahwa bertahun-tahun belum muncul di situs selama bertahun-tahun. Ya, ini adalah nasib paling banyak blog. Setelah proyek ini melakukan ambisius, dan penulis, seperti pada banyak orang lain yang menulis pada saat itu, adalah rencana skala besar untuk menjadi salah satu blogger Rusia terbaik. Nah, jika Anda melihat sekarang, kemudian dari blog yang dibuat secara bersamaan dengan saya, sebagian besar sudah larut dalam keabadian. Dan saya benar-benar menjadi blog waktu yang hilang. Jadi ya, tidak lagi diperbarui. Meskipun saya pernah menang di situs ini dalam kompetisi blog 2011.
Aku bahkan punya ide untuk menghapus semua ini, tapi kemudian aku merevisi materi lama, dan menyadari bahwa mereka masih bisa berguna bagi pembaca. Ya, beberapa artikel sudah ketinggalan zaman (jika saya memiliki kekuatan yang cukup, mereka akan menerima tanda yang sesuai), tetapi situs, misalnya, dapat bermanfaat bagi pemula - di sini Anda dapat membaca tentang konsep dasar Internet, belajar untuk menyesuaikan Internet, Windows atau bahkan memutuskan untuk pergi ke Linux. Jadi lihat judulnya dan pilih yang cocok untuk Anda.
Dan, bagaimanapun, saya harap ini lebih dari sekadar blog, tetapi panduan internet nyata. Situs ini dapat ditemukan dalam mode direktori, di mana semua artikel yang tersedia disusun berdasarkan kategori. Dan siapa yang tahu mungkin, artikel berkualitas baru akan mulai muncul di sini.
Sander.
Picodi.ru adalah portal diskon dari kupon internasional, seorang pakar Polandia dalam menabung dan membeli murah. Polandia dianggap sebagai salah satu negara paling ekonomis di dunia, oleh karena itu tidak mengherankan bahwa jenis proyek ini telah berkembang dari Startup Polandia Kodyrabatowe.pl. Apa yang bisa bermanfaat bagi portal ini ke pengguna internet biasa di Rusia?
Telepon Android modern lebih dari sekadar ponsel. Anda terbiasa dengan set program yang diinstal, dengan riwayat panggilan dan pesan teks, koleksi foto dan banyak. Tetapi waktu berjalan, dan perangkat yang sepenuhnya diatur mulai memperlambat, bug, atau hanya kehilangan tampilan yang rapi karena chipping pada tubuh atau goresan di layar. Ada pertanyaan untuk memilih telepon baru dan mengubah ponsel Android. Dan jika pertanyaan pilihan, kita sekarang akan melewati pesta sekarang, lalu "bergerak" ke telepon baru tetap menjadi masalah serius - saya benar-benar tidak ingin memulai semua data dari awal. Di sini kita akan membicarakan ini hari ini.
Sebagian besar pembaca blog ini, kemungkinan besar, tidak pernah menghadapi versi kontrol versi dan tidak akan muncul dalam waktu dekat. Dan maaf. Penemuan yang sangat user-friendly ini banyak digunakan oleh programmer, tetapi, menurut saya, itu bisa sangat berguna dan bagi mereka yang aktif bekerja dengan teks. Tetapi, mungkin, tidak ada sistem kontrol versi sekarang, yang akan mudah untuk mulai menggunakan untuk "kantor" (Microsoft Office) pekerjaan. Namun demikian, saya berpikir bahwa materi yang ditetapkan dalam artikel mungkin menarik bagi semua pembaca.
Jika Anda berpikir tentang bagaimana film menonton TV Anda melalui jaringan dan mengakses Internet, artikel ini untuk Anda. Tidak, saya tahu bahwa beberapa TV memiliki fungsionalitas Smart TV, tetapi saya belum pernah melihatnya bekerja dengan baik. Rupanya, oleh karena itu, Google baru-baru ini menunjukkan perangkat yang benar-benar menakjubkan, segera berakhir dengan sensasi. Kita berbicara tentang Chromecast Streamer Media (Chrombas), versi yang lebih sempurna dan terjangkau dari pemain yang disukai Nexus Q.
Dongle Chrombas, dimensi yang tidak melebihi 2 inci, terhubung ke port HDMI TV dan memungkinkan Anda menikmati menonton konten web streaming. Untuk mengontrol streamer, Anda dapat menggunakan perangkat apa pun (tablet, pc, smartphone) berdasarkan platform operasi iOS, Windows, Android atau Mac OS.
Artikel ini dikhususkan untuk perangkat memori sistem Android, masalah yang mungkin timbul karena kekurangan dan bagaimana menyelesaikannya. Saya sendiri tidak memiliki waktu lama yang lalu bahwa ponsel Android saya mulai menerbitkan pesan secara teratur tentang kekurangan memori ketika mencoba membuat aplikasi tertentu. Apa yang sangat aneh bagi saya meskipun fakta bahwa pada deskripsi di pasar seharusnya sekitar 16GB, dan saya juga meningkatkan volume ini menggunakan kartu memori tambahan. Namun, masalahnya adalah, dan saya harus benar-benar bermain-main sebelum saya menemukan solusi yang tepat yang tidak memerlukan penerimaan akses root atau pemulihan penuh telepon ke negara pabrik.
Baru-baru ini, banyak perhatian dibayarkan untuk membangun sistem e-bisnis, atau karena mereka juga disebut - B2B (bisnis ke bisnis). Mengingat rekomendasi tentang pembangunan sistem streaming pertukaran teknologi Internet Mengkoordinasi Tubuh - Konsorsium WWW: Penekanan dibuat terhadap teknologi XML dan membangun sistem pertukaran dokumen XML.
Keuntungan menggunakan XML dalam e-Business adalah efisiensi tinggi dari sistem B2B dengan biaya rendah untuk penciptaannya karena representasi yang jelas dan visual dari informasi terstruktur, kemampuan untuk menggunakan protokol jaringan modern dan menciptakan sistem bisnis real-time.
Independensi penyajian informasi dalam bentuk dokumen XML memungkinkan berbeda, berpartisipasi dalam bisnis elektronik, untuk menghasilkan independen satu sama lain oleh.
Di semua sistem, pertukaran biasanya dibangun oleh skema yang sama menggunakan permintaan HTTP. Protokol SSL diterapkan sebagai protokol SSL (tetapi ini adalah topik yang terpisah).
Salah satu opsi yang mungkin untuk memproses pesan XML adalah untuk membangun komponen BIN / CGI (ISAPI) -News atau COM (server) membentuk atau memproses dokumen XML.
Di satu sisi, aplikasi bertindak sebagai klien, yang dalam mode posting mengeluarkan permintaan HTTP, di sisi lain, adalah server web di sisi mana pemrosesan kueri dan jawaban diproses. Pertukaran informasi menggunakan dokumen XML.
Salah satu opsi implementasi yang paling efektif adalah penggunaan parser XML yang ada yang mendukung model DOM. Parser semacam itu adalah pasokan distributif Win`98 atau bagian integral dari IE 4.7 ke atas (untuk Win`95) dan mewakili server COM yang terletak di pustaka MSXML.dll.
Model Objek Komponen (COM) dienkapsulasi data dan metode ke dalam satu esensi dan cara untuk mengaksesnya melalui sistem antarmuka. Delphi hanya dapat diakses untuk mengakses kelas objek COM (beberapa kelas dapat dimasukkan dalam satu server COM). Akses ke objek dilakukan dengan menginisialisasi contoh kelas melalui sistem antarmuka. Deskripsi antarmuka dilakukan oleh bahasa definisi antarmuka (IDL), yang mungkin untuk melaksanakan alat media secara otomatis.
Delphi berarti impor dari server COM msxml.dll.File deskripsi antarmuka IDL dibangun dan file deskripsi biner dari tipe perpustakaan adalah TLB. Operasi ini dilakukan melalui menu sistem: Proyek | Jenis pustaka impor:(gambar 1). Kotak dialog berikut muncul (Gambar 2), di mana Anda ingin memilih objek COM (dalam kasus kami, objek terdaftar sebagai "Microsoft.xmldom (versi 2.0)") dan membuat file TLB (tombol Buat unit.). Menggunakan file TLB, lingkungan menghasilkan "paskalevsky" Deskripsi file server com - msxml_tlb.pas
File MSXML_TLB.PAS menjelaskan semua antarmuka, konstanta dan server COM.
Untuk akses ke objek elemen COM, perlu dalam arahan Menggunakan.tambahkan nama file deskripsi perpustakaan (msxml_tlb.pas). Di bawah ini adalah program paling sederhana yang menggunakan DOM Standard MSXML.dll Analyzer, yang mengunduh dokumen XML dan menampilkannya di Elemen Kotak Teks Memo1.
menggunakan. Windows, Pesan, Sysutil, Kelas, Grafik, Kontrol, Formulir, Dialog, Oleserver, MSXML_TLB, STDCTRL; tipe Tform1 \u003d. kelas(TForm) tombol1: tbutton; Memo1: tmemo; prosedur. Tombol1Klik (pengirim: mengalihkan); akhir; var. Form1: Tform1; penerapan ($ R *.dfm) Prosedur.Tform1.button1click (pengirim: mengalihkan); // Deklarasi domdocument objek Soklass; var.codoc: codomdocument; // kelas, konsisten dengan antarmuka IDOMDocument; var.DOC: ixmldocument; mulai. // membuat instance objek domdocument; Doc: \u003d codoc.create; // Panggil metode mode instance dari objek domdocument; Doc.load ("data.xml"); // akses ke instance properti XML dari objek domdocument; Memo1.text: \u003d doc.xml; akhir; akhir.Konsep DOM - Model dokumen objek
Setiap dokumen XML diwakili sebagai seperangkat pluralitas objek (kelas), dengan mana akses ke elemen individu (bidang objek) dimungkinkan. DOM - Antarmuka menjelaskan akses ke domapring sederhana atau objek dan bagian karakter atau elemen XML terpisah dari dokumen: DomFragmentElement, Domnode, Domelement.
Berikut ini adalah sifat yang paling penting dan metode xmldomdocument, xmldomnode, xmldomnodelist. Perlu dicatat bahwa model MSXML.DLL XML Analyzer, MSXML.DLL XML Analyzer, disajikan di bawah ini, digunakan oleh MSXML.DLL XML Analyzer daripada konsorsium DOM yang disetujui oleh model W3C.
Deskripsi yang lebih lengkap dari objek DOM antarmuka dapat ditemukan pada
Obyek XmldomDocument. | |
Mewakili tingkat atas hierarki objek dan berisi metode untuk bekerja dengan dokumen: unduhannya, analisis, membuat elemen, atribut, komentar di dalamnya, dll. . | |
Properti | |
Async. | Properti Mengidentifikasi Mode Pemrosesan Saat Ini |
Parseerror | Mengembalikan referensi ke objek pemrosesan kesalahan xmldomparseerror |
Aktifkan - Nonaktifkan verifikasi dokumen. | |
uRL | Mengembalikan URL dokumen |
dokumentasi. | Berisi referensi ke elemen akar dokumen sebagai objek xmldomemement. |
Metode. | |
lOAD (URL) loadXML (xmlstring) |
Memuat dokumen XML |
simpan (objtarget) | Menyimpan dokumen XML dalam file |
mENGGUGURKAN. | Menginterupsi proses mengunduh dan memproses dokumen. |
createattribute (Nama) | Membuat atribut baru dengan nama yang ditentukan untuk item saat ini. |
createnode (tipe, nama, namespaceuri) | Membuat simpul dari jenis dan judul yang ditentukan |
creepeelement (tagname) | Membuat elemen dokumen dengan nama yang ditentukan. |
createTextNode (data) | Membuat teks di dalam dokumen |
getElementsBytagname (TagName) | Mengembalikan tautan ke koleksi item dokumen dengan nama yang ditentukan |
nodefromid (IDString) | Elemen pencarian dengan pengidentifikasi |
Obyek Xmldomnode. | |
Objek xmldomnode yang mengimplementasikan antarmuka DOM dasar ., Dirancang untuk memanipulasi dengan simpul terpisah dari pohon dokumen. Properti dan metodenya memungkinkan Anda untuk menerima dan mengubah informasi lengkap tentang node saat ini - jenisnya, nama, nama lengkap, isinya, daftar elemen anak, dll. | |
Properti | |
nodename, Basename. | Mengembalikan nama node saat ini. |
awalan. | Mengembalikan awalan namespace. |
tipe data | Mendefinisikan jenis konten dari node saat ini |
nodetype, Nodetypestring. | Mengembalikan jenis node saat ini: |
atribut. | Mengembalikan daftar atribut dari node saat ini sebagai koleksi xmldomnamendemap. |
tEKS. | Mengembalikan isi dukungan saat ini dalam bentuk teks. |
xml. | Mengembalikan representasi XML dari dukungan saat ini. |
nodeValue. | Mengembalikan isi node saat ini. |
anak-anak. | Mengembalikan daftar elemen anak sebagai xmldomnodelist. |
firstilt, LastChild. | Mengembalikan elemen anak pertama / terakhir |
sebelumnya, Nextsibling. | Mengembalikan elemen keperawatan sebelumnya / berikutnya. |
parentnode. | Berisi referensi ke elemen induk. |
ownerDocument. | Mengembalikan pointer ke dokumen di mana node saat ini berada. |
Metode. | |
appendchild (Newchild) | Menambahkan elemen anak baru ke node saat ini. |
insertbefore (newchild, rentang) | Menyisipkan simpul anak, memilikinya di subtree saat ini "kiri" dari node yang ditentukan oleh parameter REFCHILD. |
clonenode (dalam) | Buat salinan elemen saat ini. |
retatur ulang.(Nama) getAttributenode. (Nama) setattribute (Nama, Nilai) setattributenode (XmldoStribute) |
Akses ke atribut (membuat, membaca, menulis). Nama - Nama atribut, nilai - nilainya. Mengembalikan nilai objek XmldoStribute. |
replacechild (newchild, oldchild) removeChild (oldchild) | Mengganti objek Oldchild dari daftar anak perusahaan saat ini di Newchild. Melepaskan objek Oldchild |
selectNodes SelectSinglende (PatmingString) | Mengembalikan objek xmldomnodelist yang dipilih oleh pola pencarian atau simpul pertama |
transformnode (styesheet) transformnodetobject (stylesheet, outputObject) |
Menetapkan tabel gaya untuk mendukung node saat ini dan mengembalikan string - hasil pemrosesan. Referensi ke objek domdocument ditransmisikan sebagai parameter, di mana instruksi XSL berada. |
Menggunakan XML dalam bisnis.
Untuk gambar yang lebih jelas, penjelasan diperlukan, dan mengapa semua ini diperlukan dengan apa yang harus dipahami cara kerjanya:
Saat membangun sistem ERP B2B atau perusahaan, ketika mengorganisir pertukaran informasi dokumen XML antara perusahaan atau cabang Prom-I, sistem informasi yang terbukti secara efektif digunakan berdasarkan server web yang tersedia pada protokol HTTP.
Di satu sisi, aplikasi bertindak sebagai klien, yang dalam mode posting mengeluarkan permintaan HTTP, di sisi lain, server web ada di sisi mana permintaan diproses dan respons. Dokumen XML digunakan sebagai pertukaran.
Misalnya, dalam sistem ERP korporasi sederhana dari program akuntansi (ACS Accounting), perlu untuk membentuk permintaan tertentu untuk faktur dan mentransfernya ke cabang yang memiliki gudang (ACS Warehouse). Seni adalah pengaturan yang sama dari masalah ketika membuat B2B sistem, ketika perusahaan meminta ketersediaan produk (membuat pesanan untuk pembelian) dari pemasok V.
Enterprise A dan programnya bertindak sebagai klien. Gudang melayani pemasok di WHO memiliki kompleks Gudang BD di SQL Server. Pertukaran dilakukan melalui Pemasok Server Web Korporat V.
Di bawah ini adalah algoritma pertukaran khas berikut:
Gambar 3.
- Perusahaan A.inisiat. proses A.(Pesanan produk), yang bertindak sebagai klien web.
- Proses A.menghasilkan dokumen XML (misalnya, faktur) dan mentransmisikannya sebagai permintaan post http ke server web Supplier V. Sebagai URI - pengidentifikasi aplikasi pemrosesan digunakan. URI mungkin sama dengan semua jenis dokumen atau individu untuk setiap jenis. Itu semua tergantung pada struktur server B2B (web).
- Server Web menganalisis permintaan dan menghasilkan server Proses B.Dengan melewati dokumen XML sebagai parameter.
Proses di server web dimulai dan diproses sebagai asp halaman, CGI (ISAPI) - aplikasi atau Java Sevrlet (aplikasi server) - Proses B.- Menghasilkan permintaan ke server database SQL.
- Server SQL membuat operasi yang diperlukan dalam database, membentuk jawaban dan mengembalikannya. Proses B..
- Pada jawaban dari server SQL Proses B. Menghasilkan dokumen XML (jawaban) dan membiarkannya sebagai jawaban untuk permintaan HTTP ke aplikasi klien.
- Selanjutnya, tergantung pada situasi di sisi klien, baik kueri HTTP baru terbentuk, atau sesi berakhir.
Beberapa kata tentang organisasi manajemen dokumen.
Aturan umum pengembangan sistem pertukaran XML adalah:
- pertama- Pengembangan sirkuit aliran dokumen elektronik dan strukturnya;
- kedua- Pengembangan tabel fungsi proses (Subprocesses) I.E. Apa fungsi dalam kaitannya dengan dokumen XML mana yang akan mengimplementasikan setiap proses.
Setiap dokumen XML, seperti dokumen HTML, harus terdiri dari header pesan (Tahanan Informasi) dan badan pesan (untuk permintaan informasi ini dibingkai dengan penandaan untuk menanggapi permintaan). Agar dokumen XML terbentuk dengan benar, perlu untuk dua komponennya dari "header" dan "permintaan" ke tag berbingkai, misalnya. Pandangan dokumen standar disajikan di bawah ini:
Judul (Gambar 4), berbeda dengan HTML dokumen, harus berisi berbagai jenis informasi layanan, termasuk informasi tentang jenis dokumen yang ditransmisikan dan memproses proses. Pemrosesan dokumen informasional diterima, I.E. Bagian yang bermakna dibingkai oleh tag. Perlu dicatat bahwa struktur header harus disatukan untuk semua jenis dokumen.
Untuk proses yang berjalan oleh server, algoritma pemrosesan lebih disukai (tetapi tidak perlu) untuk membangun sebagai berikut:
Gambar 6.
Beberapa momen utama saat membuat bagian klien
Seperti yang sudah dijelaskan, ketika membuat dokumen XML menggunakan presentasinya dalam bentuk model DOM. Di bawah ini adalah contoh teks teks Delphi dari program Header Pesan XML.
prosedur.Tthread1.headercreate (pengirim: mengalihkan); var. // Pengumuman kelas diperlukan untuk membuat Codoc: codomdocument; // xmldomDocument Obyek. Doc: domdocument; R: IxmldomElement; Node: ixmldomelement; // domText txt: ixmldomtext; // Domattribute Atr: IxmldoTtribute; mulai. // Menciptakan Dokumen DOM Doc: \u003d codoc.create; Doc.set_async (false); // dokumen inisiasi awal DOM Doc.loadxml ("Perlu dicatat bahwa pengumuman codoc: codomdocument dan doc: variabel domdocument, serta pembuatan metode Buat (Doc: \u003d codoc.create;) dilakukan sekali. Deklarasi variabel ada di bagian dari deskripsi variabel global, dan bukan dalam prosedur lokal, seperti yang ditunjukkan untuk visibilitas dalam contoh ini (I.E. Satu variabel global dari modul program tipe satu domdocument).
Hasil dari program di atas akan menjadi header yang dibuat, sehubungan dengan contoh dari dokumen XML kami: yang digambarkan pada Gambar 5.
Gambar 5.
Gambar 6.
Keuntungan utama dari mentransmisikan informasi dalam bentuk dokumen XML adalah dimungkinkan untuk membentuk pesan menggunakan struktur independen dari tabel di DBMS baik pada sisi yang diterima dan pada sisi yang ditransmisikan. Menggunakan contoh kami, biarkan diperlukan untuk mentransfer informasi tentang faktur perusahaan A, dari DBMS struktur yang ditunjukkan pada Gambar 6
Untuk membentuk dokumen XML yang berisi faktur, permintaan SQL yang awalnya dibuat (kueri A) dengan informasi tentang faktur:
PILIH * Dari faktur_General. Dimana Invoicenum \u003d: num PILIHBarang, quulity, harga, hz_cod Dari.Barang Dimana Invoicenum \u003d: num //: Num - parameter yang menentukan nomor faktur.Di bawah ini adalah bagian dari program yang membentuk badan dokumen XML:
prosedur. Tthread1.databodycreate (pengirim: tobject); var. // Kelas dan XmldomDocument // codoc: codomdocument; // harus global, untuk seluruh modul. // doc: domdocument; // Pengumuman objek domelement R: IxmldomElement; // domelement; Node, node2: ixmldomelement; Node3, node4: ixmldomelement; // domText txt: ixmldomtext; Str: string; // Nomor faktur: bilangan bulat; - Variabel global - // masching 987654 // querya, queryb: Tali; - Variabel global, // Mempertahankan Permintaan untuk Meminta // Querya - Permintaan dan Informasi Umum tentang Invoice // QueryB - Query B Informasi tentang Barang yang Dijelaskan dalam // Teks (lihat Teks) mulai. Query.close; // lihat teks "Minta A" Query.Text: \u003d Querya; // Permintaan eksekusi Query.execsql; Kueri.open; // Dapatkan alamat elemen root R: \u003d doc.get_documentelement; Node2: \u003d doc.createtement ("request"); // buat domelement (tag) Node: \u003d doc.createleelement ("faktur"); // menambahkan item ke root R.appendchild (node2); // menambahkan item di Node2. Appendchild (node); // buat domelement (tag) Node3: \u003d doc.createleelement ("depurture"); // menambahkan item di . Appendchild (node3); // Banding ke bidang "depurture" Str: \u003d query.fieldbyname ("depurture"). Asstrain; // membuat node teks \u003d nilai bidang // Nilai Penugasan Node // node teks, variabel str Node.appendchild (txt); // operasi serupa untuk tagSebagai hasil dari prosedur ini, teks berikut dari dokumen XML terbentuk:
Metode terbuka digunakan untuk membentuk kueri. Ixmlhttpreest.:
prosedur. Buka (Const Bstrmethod, - Metode Type \u003d "Post" BStrurl, - Alamat Server Varasync URL, - Mode Komunikasi Asinkron / Sinkron \u003d Bstruer Benar, - Nama Pengguna untuk Otentikasi Bstrpass) - Kata SandiMembuat Server Bagian dari Pemrosesan Dokumen
Seperti disebutkan sebelumnya, pemrosesan permintaan HTTP dapat dilakukan aplikasi CGI atau java servlets. Pilihan yang mungkin untuk menulis halaman ASP. Tetapi dalam hal ini, transmisi data hanya dimungkinkan oleh "Dapatkan" menggunakan string kueri. Meskipun, pemrosesan HTTP dari permintaan halaman ASP bekerja lebih efisien daripada aplikasi CGI. Namun, menurut saya, tanpa perbedaan, bagaimana cara memproses, dan yang lebih penting untuk menyelesaikan pertanyaan - cara membangun program pemrosesan, dan tidak dengan apa artinya.
Jika kami meninjau opsi formasi dokumen XML dari bab sebelumnya, maka tugas aplikasi server adalah kebalikan dari dokumen XML. Di bawah ini adalah bagian dari program yang menganalisis dokumen XML:
prosedur.Tthread1.dataparser (pengirim: tobject); var. // Pengumuman objek domelement R, fnode: ixmldomelement; Str, nama file: string; Parm: String; // pengumuman Soklass dan Codocxml, codocxsl, codokresult: codomdocument; // xmldomDocument Obyek. Xmldoc, XSLDoc, ResultOc: domdocument; // httpstr: string; - variabel global yang berisi string kueri HTTP Mulai. Xmldoc: \u003d codocxml.create; Xmldoc.loadxml (httpstr); // Dapatkan alamat elemen root R: \u003d doc.get_documentelement; // Memperoleh nilai elemen Fnode: \u003d r.selectSingLenode ("// typedocument"); // Dapatkan Nilai Atribut ID \u003d "Pesanan" Nama file: \u003d fnode.getationstiped ("id"); // dan membentuk file name order.xsl Nama file: \u003d Nama file + ". XSL"; // buat dokumen xsldoc XSLDOC: \u003d codocxsl.create; Xsldoc.loadxml (nama file); // membuat dokumen xmldoc Resultasi: \u003d codokresult.create; // Mengatur mode pemrosesan sinkron ResultOc.Set_Async (Salah); // Menginstal Pemeriksaan Debut ResultDoc.validateOnparase: \u003d Benar; // Collapse Xmldoc dengan Templat XSL Xmldoc.transformnoc, resultoc (xsldoc, resultoc); // variabel str diberi nilai teks // dokumen yang dihasilkan. Str: \u003d resultoc.text; // elemen pencarian Fnode: \u003d r.SelectSingLenode ("// invoicenumber"); // dan mendapatkan nilai elemen Parm: \u003d fnode.text; // Menutup Permintaan Akses Query.close; Query.Text: \u003d str; // menugaskan nilai parameter Query.params.asstring: \u003d parm; // Permintaan eksekusi Query.execsql; akhir;Seluruh rentang parsing adalah dengan menerapkan templat XSL, yang dibentuk untuk setiap jenis dokumen secara individual. Hasil analisis adalah string kueri SQL. Sebagai konsekuensinya, eksekusi string kueri SQL yang dihasilkan akan membuat perubahan yang diperlukan dalam DBMS.
Keuntungan menggunakan parsing melalui templat juga pada kenyataannya bahwa ternyata beberapa fleksibilitas data, dan independensi lengkap dari operasi algoritma dari kode program diperoleh. Di bawah ini adalah teks templat XSL seperti yang digunakan untuk jenis dokumen pemrosesan.
Penelitian contoh di atas, perlu dicatat bahwa penggunaan pasangan tag dan formal, karena Setelah parsing, setidaknya satu node harus hadir dalam dokumen XML yang dihasilkan. Metode LapisanDok.Teks menetapkan nilai teks yang diperoleh selama analisis Laporan Dokumen XML. Dalam hal ini, nilainya adalah semua pasang tag dibingkai dan ,.e. Kami telah membentuk permintaan SQL.
Fitur lain dari penulisan program harus dicatat kemungkinan menggunakan parameter SQL : num. Menggunakan parameter memungkinkan Anda untuk menyederhanakan teks templat XSL. Definisi Nilai elemen yang sesuai dari node dokumen XML ditentukan pada awalnya memilih nama node yang sesuai, misalnya:
Secara singkat tentang XSL
Singkatan XSL berasal dari Bahasa Gaya Bahasa Stylesheet yang dapat diperluas (data XML). Karena jelas dari header Bahasa Stylesheet yang dapat diperluas (XSL) digunakan untuk memformat data XML. Menurut definisi W3C XSL terdiri dari dua bagian:
- Transformasi XSLT - XSL. Bahasa yang digunakan untuk mengkonversi atau memformat (mengubah) dokumen XML. Dengan demikian, menggunakan XSLT, kita bisa mendapatkan bagian berbeda dari beberapa data dan formulir presentasi data.
- Elemen pemformatan. Elemen-elemen ini mencakup semua elemen desain data tipografi, setelah diproses menggunakan XSL. Hanya digunakan untuk membentuk halaman HTML.
Menggunakan XSLT, kita dapat memilih data dari file XML yang Anda butuhkan, dan mengaturnya dalam formulir untuk memberikan pengguna. Misalnya, dalam kasus kami, kami mengubah data XML sebagai kueri SQL. Aplikasi XSL klasik biasanya memformat data sebagai halaman HTML atau representasi langka dalam bentuk file RTF.
File XSL menjelaskan template (template), yang menurutnya konversi data XML akan dilakukan. Kembali ke templat XSL, elemen-elemen berikut dapat dialokasikan dalam XSLT (arahan):
XSL Directive. | deskripsi |
---|---|
xSL: Apply-Templates | Arahan, menunjukkan aplikasi atribut template yang sesuai pilih \u003d "Nama Template" |
xSL: Atribut. | membuat pohon atribut dan menambahkannya ke elemen output, nama \u003d "nama atribut" parameter, namespace - URI pada namespace (namespace awalan) |
xSL: Panggilan-template | menyebabkan templat, nama atribut \u003d "URI pada template" |
xSL: Pilih. xSL: Kapan. xSL: Kalau tidak. |
membuat pilihan dengan syarat XSL: Ketika Expr \u003d "menghitung ekspresi pada skrip", bahasa \u003d "Nama-Bahasa" test \u003d "ekspresi dihitung" |
xSL: Komentar | menghasilkan komentar pada dokumen output |
xSL: Salin. xSL: salinan |
menyalin simpul saat ini di sumber keluaran atau memasukkan fragmen dokumen ke node di mana bagian Select \u003d "Nama Sumber Node" atribut |
xSL: Element. | menciptakan elemen output dengan nama, nama atribut \u003d "Nama elemen", namespace \u003d "Referensi URI ke namespace" |
xSL: untuk-masing-masing | oleskan kembali template ke semua node daftar node, pilih Atribut Set daftar node. |
xSL: Jika. | periksa kondisi diatur oleh atribut uji sebagai ekspresi |
xSL: Sertakan | termasuk templat eksternal, atribut href \u003d "referensi URI" |
xSL: Output | menentukan hasil keluaran, atribut metode mungkin memiliki "XML", "HTML" atau "Text" |
xSL: Param. | menentukan nilai parameter, nama \u003d atribut "parameter nama", pilih \u003d "Nilai" |
xSL: instruksi pemrosesan | membuat instruksi untuk pemrosesan, nama atribut \u003d "instruksi proses nama" |
xSL: Sortir. | mengurutkan banyak node, atribut pilih \u003d "nama simpul", tipe data \u003d tipe data ("teks" | "angka" | qname), Pesanan \u003d Urutkan arah ("Naik" | "Turun") |
xSL: Stylesheet. | menentukan dokumen templat XSL, adalah elemen root untuk XSLT |
xSL: Template. | menentukan templat XSL, nama \u003d "atribut awalan URI ke nama template", match \u003d "Catatan ke node yang diterapkan template" |
xSL: Teks. | menghasilkan teks ke stream output, Nonaktifkan-output-Escaping \u003d "Ya" atau "Tidak" atribut menunjukkan kemampuan untuk menghasilkan karakter ESC |
xSL: Nilai-of | menyisipkan nilai node yang dipilih sebagai teks, atribut Select \u003d "Pointer ke Node" dari mana nilainya diambil |
xSL: Variabel | menentukan nilai batas variabel, atribut nama \u003d "nama variabel", pilih \u003d "Hitung nilai variabel" |
xSL: dengan-param | menerapkan parameter ke template, atribut nama \u003d "nama parameter", pilih \u003d ekspresi untuk menghitung konteks saat ini, nilai default "." |
Kesimpulan
Kesimpulannya, harus dicatat bahwa menggunakan parser XML standar msxml.dll.ini bukan satu-satunya cara parsing dan membuat dokumen XML. Misalnya, untuk membuat dokumen XML untuk menggunakan komponen secara efektif TpAgeproduser.dan TtableProduser.. Tetapi artikel ini hanya menekankan luas dan kemungkinan menerapkan model DOM dalam praktik.
Penulis akan sangat berterima kasih atas umpan balik atas relevansi topik, keseluruhan konten, gaya presentasi, serta semua komentar lain yang akan membantu lebih meningkatkan kualitas menulis koleksi artikel dan rilis buku yang mencakup Subjek dari sisi praktis penggunaan dokumen XML dalam e-commerce. Untuk informasi lebih lanjut tentang sisi praktis penerapan dokumen elektronik, Anda dapat belajar dari www.edocs.al.ru di situs web penulis, juga direncanakan untuk menempatkan teks sumber dan contoh.