Delphi ortamında XML kullanarak. XML Belgesi Nesne Modelini Kullanma Delphi Xe Flap'ta XML Oluşturma
Hoşgeldiniz! Bu blog internete ve bilgisayarlara ayrılmıştır ve daha kesin olarak onlara kendilerine adanmışlardır.
Muhtemelen, yıllarca yıllarca yıllarca görünmediği görülüyor. Evet, bu çoğu blogun kaderi. Bu proje hırslı bir taahhüdeyken ve yazarın, o sırada yazan birçok kişiden olduğu gibi, en iyi Rus blogcularından biri olmak için büyük ölçekli planlardı. Şimdi, şimdi bakarsanız, o zaman benimle aynı anda yaratılan bloglardan, çoğu zaten sonsuzluk içinde çözüldü. Ve ben kesinlikle eksik zaman blog oldu. Öyleyse evet, artık güncellenmiyor. Bir zamanlar 2011 blog yarışmasında bu sitede kazandım.
Bütün bunları kaldırma fikri bile vardı, ama sonra eski malzemeleri revize ettim ve okuyucular için hala faydalı olabileceklerini fark ettim. Evet, bazı makaleler modası geçmiştir (eğer yeterince gücüm varsa, uygun işaretleri alacaklarsa), ancak Site, örneğin yeni başlayanlar için faydalı olabilir - burada internetin temel kavramlarını okuyabilir, özelleştirmeyi öğrenebilirsiniz. İnternet, pencere hatta Linux'a gitmeye karar ver. Öyleyse başlıklara bakın ve sizin için uygun olanı seçin.
Ve sonuçta, umarım sadece bir blogdan daha fazlasıdır, ancak gerçek bir internet rehberidir. Site, mevcut tüm makalelerin kategorilerle yapılandırıldığı dizin modunda bulunabilir. Ve belki kim bilir, yeni kaliteli makaleler burada görünmeye başlayacak.
Züppe
Picodi.ru, uluslararası kuponlardan, bir Polonya uzmanından tasarruf ve ucuz alımlarda indirimli bir portaldır. Polonyalılar, dünyadaki en ekonomik uluslardan biri olarak kabul edilir, bu nedenle bu tür bir projenin Polonya Başlangıç \u200b\u200bKodyrabatowe.pl'den büyüdüğü şaşırtıcı değildir. Rusya'daki sıradan bir internet kullanıcısına bu portal için ne yararlı olabilir?
Modern Android telefonlar telefonlardan daha fazlasıdır. Yüklü programların setine, aramalarınızın geçmişine ve kısa mesajlarınızın geçmişine, fotoğraf koleksiyonlarına ve çok şeye alışırsınız. Ancak zaman geçiyor ve tamamen düzenlenmiş cihaz yavaşlatmaya, hatayı yavaşlatmaya başlar ya da ekrandaki gövde veya çiziklerden dolayı sunabilir bir görünümü kaybeder. Yeni bir telefon seçme ve Android telefonu değiştirme sorusu var. Ve eğer seçim meselesi şimdi partiyi şimdi atlayacağız, daha sonra yeni bir telefona "hareket etmek" ciddi bir sorun olmaya devam edeceğiz - kesinlikle tüm verileri sıfırdan başlatmak istemiyorum. Burada bugün bunun hakkında konuşacağız.
Bu blogun okuyucularının çoğu, büyük olasılıkla, versiyon kontrolünün versiyonları olmadı ve yakın gelecekte gelmeyecek. Ve üzgünüm. Bu son derece kullanıcı dostu buluş programcılar tarafından yaygın olarak kullanılmaktadır, ancak bence, bence, çok yararlı olabilir ve metinlerle aktif olarak çalışanlar için. Ancak, muhtemelen, çalışmanın "ofisi" (Microsoft Office) için kullanmaya başlamak kolay olacağı bir sürüm kontrol sistemi yoktur. Bununla birlikte, makalede belirtilen malzemenin tüm okuyucular için ilginç olabileceğini düşünüyorum.
TV'nizden nasıl film izlediğini düşünüyorsanız ve internete erişin, bu makale sizin içindir. Hayır, bazı televizyonların akıllı TV'nin işlevselliğini aldığını biliyorum, ama iyi çalıştığını hiç görmedim. Görünüşe göre, Google'ın yakın zamanda tamamen çarpıcı bir cihaz olduğunu gösterdi, hemen bir his ile sona erdi. Medya Streamer Chromecast (Chromkast), geçen yılın tercih edilen oyuncu Nexus Q.'in daha mükemmel ve uygun fiyatlı bir versiyonundan bahsediyoruz.
Boyutları 2 inç'i geçmeyen Dongle Chromkast, TV'nin HDMI portuna bağlanır ve web içeriğini izlemekten keyif almanıza olanak sağlar. Flamayı kontrol etmek için, iOS, Windows, Android veya Mac OS işletim platformuna göre herhangi bir cihazı (tablet, PC, akıllı telefon) kullanabilirsiniz.
Bu makale, Android sistem bellek cihazına, eksikliği ve bunların nasıl çözülmesi nedeniyle ortaya çıkabilecek sorunlara ayrılmıştır. Ben kendimi çok uzun zaman önce, Android telefonumun belirli bir uygulama kurmaya çalışırken düzenli olarak bellek sıkıntısı hakkında düzenli olarak mesajları vermeye başlamaya başladım. Piyasadaki açıklamanın yaklaşık 16GB olması gerektiğine rağmen benim için çok garipti ve bu hacmi ek bir hafıza kartı kullanarak da arttırdım. Bununla birlikte, problemdi ve kök erişiminin makbuzunu veya telefonun fabrika durumuna tamamen geri kazanılmasını gerektirmeyen doğru çözümü bulmadan önce iyice tinker yapmalıydım.
Son zamanlarda, e-iş sistemleri inşa etmek için çok dikkat edilir, ya da onlar da denir - B2B (iş için iş). Vücudun İnternet Teknolojilerini Koordinasyon Koordinasyon Sistemlerinin İnşaatı konusundaki önerileri göz önüne alındığında, WWW Konsorsiyumu: XML teknolojileri ve bina XML belge değişim sistemlerine vurgu yapılır.
E-işinde XML kullanmanın avantajı, yapılandırılmış bilgilerin net ve görsel gösterimi nedeniyle, modern ağ protokollerini kullanabilme ve gerçek zamanlı iş sistemleri oluşturma kabiliyeti nedeniyle oluşturulması için düşük maliyetli B2B sistemlerinin yüksek verimliliğidir.
XML belgeleri şeklinde bilgi sunumunun bağımsızlığı, elektronik işlere katılmak, birbirinden bağımsız olarak üretmek için farklıdır.
Tüm sistemlerde, değişim genellikle HTTP isteklerini kullanarak aynı şema tarafından oluşturulur. SSL protokolü, SSL protokolü olarak uygulanır (ancak bu ayrı bir konudur).
XML mesajlarını işlemek için olası seçeneklerden biri, XML belgelerini oluşturan veya işleyen Bin / CGI (ISAPI) -NEWS veya COM (sunucu) bileşenlerini oluşturmaktır.
Bir yandan, uygulama, posta modunda bir HTTP sorgusu, diğer yandan, sorgu işlemesinin ve bir cevabın işlendiği bir Web sunucusu olduğu bir istemci olarak işlev görür. Bilgi değişimi, XML belgelerini kullanır.
En etkili uygulama seçeneklerinden biri, DOM modelini destekleyen mevcut bir XML ayrıştırıcısının kullanımıdır. Böyle bir ayrıştırıcı, Win`98 veya IE 4.7'nin (Win`95 için) entegre bir parçasıdır (Win`95 için) ve MSXML.dll kütüphanesinde bulunan COM sunucusunu temsil eder.
Bileşen Nesne Modeli (COM) kapsüllenmiş veri ve yöntemler tek bir özüne ve bunlara arayüz sistemi üzerinden erişmenin bir yoludur. Delphi, COM nesne sınıflarına erişmek için kolayca erişilebilirdir (birkaç sınıf bir COM sunucusunda dahil edilebilir). Nesnelere erişim, sınıf örneğini arayüz sistemi aracılığıyla başlatılarak gerçekleştirilir. Arabirimlerin açıklaması, ortamın araçlarını otomatik olarak gerçekleştirmek mümkün olan arayüz tanım diliyle (IDL) gerçekleştirilir.
Delphi, COM sunucusundan ithalat anlamına gelir. msxml.dll.IDL arayüzü açıklama dosyaları oluşturulur ve kütüphane türünün ikili açıklama dosyası TLB'dir. Bu işlem sistem menüsünden gerçekleştirilir: Proje | Tip Kitaplığı İçe Aktarma:(Resim 1). Bir COM nesnesi seçmek istediğiniz aşağıdaki iletişim kutusu belirir (bizim durumumuzda, nesne "Microsoft.xmldom (sürüm 2.0)" olarak kaydedilir) ve bir TLB dosyası oluşturun (düğme) Birim oluştur.). TLB dosyasını kullanarak, çevre, COM sunucusunun "Paskalevsky" dosya açıklamasını oluşturur - MSXML_TLB.PAS
MSXML_TLB.PAS dosyası, tüm arayüzleri, sabitleri ve COM sunucularını açıklar.
COM öğesinin nesnelerine erişim için, Direktifte gereklidir. Kullanır.kütüphane Açıklama Dosyasının adını (MSXML_TLB.PAS) ekleyin. Aşağıda, XML belgesini indiren ve MEMO1 metin kutusu öğesinde görüntülenen DOM Standard Msxml.dll Analyzer'i kullanan en basit programdır.
kullanır. Windows, Mesajlar, Sysutils, Sınıflar, Grafikler, Kontroller, Formlar, Diyaloglar, Oleserver, MSXML_TLB, STDCTRLS; tip Tform1 \u003d. sınıf(TForm) düğmesi1: tbutton; Memo1: tmemo; prosedür. Button1Click (Gönderen: TOGJECT); son; var. Form1: TForm1; uygulama ($ R * .dfm) Prosedür.Tform1.button1Click (Gönderen: TOGJECT); // Soklass Nesnesi DOMDOCUMENT Beyanı; var.cODOC: CODOMDOCUMENT; // sınıf, IDOMDocument arayüzü ile tutarlı; var.DOC: ixmldocument; başla. // DOMDocument nesnesinin bir örneğini oluşturma; DOC: \u003d codoc.create; // DOMDocument nesnesinin bir örneğinin bir mod yöntemini çağırın; DOC.LOAD ("data.xml"); // DOMDocument nesnesinin XML özellik örneğine erişim; Memo1.Text: \u003d doc.xml; son; son.Dom Kavramı - Nesne Belgesi Modeli
Her bir XML belgesi, bireysel elemanlara (nesne alanlarına) erişimin mümkün olduğu, çok sayıda nesnenin (sınıf) bir dizi olarak gösterilir. DOM - Arabirim, hem basit domstring veya karakterData nesnelerine ve parçalarına veya belgenin ayrı xml elemanlarına erişimi açıklar: DOMFRAGENTElement, DOMNODE, DOMELEMENT.
Aşağıdakiler, XmldomDocument, XmldOmnode, Xmldomnodelist'in en önemli özellikleri ve yöntemleridir. MSXML.DLL XML Analyzer, aşağıda sunulan MSXML.dll XML Analiz Cihazı, MSXML.dll XML analizörü tarafından W3C modelinin onayladığı DOM konsorsiyumundan daha kullandığı belirtilmelidir.
Arayüz DOM nesnelerinin daha eksiksiz bir açıklaması bulunabilir
Xmldomdocument nesnesi | |
Nesne hiyerarşisinin üst seviyesini temsil eder ve bir belge ile çalışmak için yöntemler içerir: indirmeleri, analizi, öğeleri oluşturma, nitelikler, yorum vb. . | |
Özellikleri | |
Asenkron. | Mevcut işleme modunu tanımlayan özellik |
Ayrıştırma hatası | XMLDOMPARSEError hata işleme nesnesine bir başvuru döndürür |
Etkinleştir - belge doğrulamasını devre dışı bırakın. | |
url | Belgenin URL'sini döndürür |
belgeselleşme | Belgenin kök elemanına XMLDomement nesnesi olarak bir referans içerir. |
Yöntemler | |
yük (URL) loadxml (xmlstring) |
Bir XML belgesi yükler |
kaydet (objtarget) | XML belgesini dosyadaki kaydeder |
İptal etmek. | Belgeyi indirme ve işleme sürecini kesintiye uğratmak. |
createAttribute (Ad) | Geçerli öğe için belirtilen adla yeni bir özellik oluşturur. |
createnode (Tip, Ad, AdPaceuri) | Belirtilen tür ve başlığın bir düğümü oluşturur |
createelment (tagname) | Belirtilen adla bir belge öğesi oluşturur. |
createtextnode (veriler) | Belgenin içindeki metin oluşturur |
getelerementsbytagname (tagname) | Belge öğelerinin toplanmasına belirtilen adla bir bağlantı döndürür. |
nodefromid (idstring) | Tanımlayıcı tarafından arama öğesi |
Xmldomnode nesnesi | |
Temel DOM arayüzünü uygulayan XmldOmnode nesnesi Düğüm., Bir belge ağacının ayrı bir düğümü ile manipüle etmek için tasarlanmıştır. Özellikleri ve yöntemleri Geçerli düğüm hakkında tam bilgiyi almanıza ve değiştirmenize izin verir - türü, adı, tam adı, içeriği, çocuk elemanlarının bir listesi vb. | |
Özellikleri | |
nodename, Basename. | Geçerli düğümün adını döndürür. |
Önek. | Ad alanı önekini döndürür. |
veri tipi | Geçerli düğümün içerik türünü tanımlar |
nOMETYPE, NOMETYPESTRING | Geçerli düğümün türünü döndürür: |
Öznitellikler. | XMLDOMNAMENDEMAP koleksiyonu olarak geçerli düğümün niteliklerinin bir listesini döndürür. |
mETİN. | Geçerli desteğin içeriğini metin biçiminde döndürür. |
xml | Geçerli desteğin XML'sini döndürür. |
nodevalue. | Geçerli düğümün içeriğini döndürür. |
Çocuk günleri. | Xmldomnodelist olarak çocuk elemanlarının bir listesini döndürür. |
İlk, lastchild. | İlk / son çocuk öğesini döndürür |
Önceki Blobling, Nextsibling | Önceki / sonraki hemşirelik elemanını döndürür. |
parentNode. | Ana öğeye bir referans içerir. |
ownerDocument | İşaretçiyi, geçerli düğümün bulunduğu belgeye döndürür. |
Yöntemler | |
appendchild (Newchild) | Geçerli düğüme yeni bir çocuk öğesi ekler. |
İnsertBefore (Newchild, RefChild) | RefChild parametresi tarafından belirtilen düğümün geçerli alt üstlemede bulunan bir çocuk düğümü yerleştirir. |
klonenode (derin) | Geçerli öğenin bir kopyasını oluşturun. |
getattribute.(İsim) getattributenode. (İsim) setTribute (Ad, Değer) setattributenode (xmldomattribute) |
Niteliklere (oluşturma, okuma, yazma) nesnesine erişim. İsim - öznitelik adı, değer - değeri. Xmldomattribute nesnesinin değerini döndürür. |
replachild (Newchild, Oldchild) RemoveChild (OldChild) | OldChild Nesnesinin mevcut iştirak listesinin NewChild üzerindeki nesnesini değiştirme. OldChild Nesnesini Çıkarma |
selectNodes SelectSingLende (Patternstring) | Arama deseni veya ilk düğüm tarafından seçilen XmldOmnodelist nesnesini döndürür |
transformNode (Styesheet) transformNoDetObject (Stylesheet, OutperestObject) |
Geçerli düğümü desteklemek için bir stil tablosu atar ve dizgeyi döndürür - işlemenin sonucu. DOMDocument nesnesine bir referans, XSL talimatlarının bulunduğu bir parametre olarak iletilir. |
İşte XML kullanarak.
Daha net bir resim için, bir açıklama gereklidir ve bunun nedeni, nasıl çalıştığını anlamanız için gereklidir:
Bir B2B veya Kurumsal ERP sistemi oluştururken, Prom-I'in işletmeler veya şubeleri arasında XML belgelerinin bir bilgi alışverişini düzenlerken, HTTP protokollerinde mevcut Web sunucuları temelinde etkili bir şekilde kanıtlanmış bir bilgi sistemi kullanılır.
Bir yandan, uygulama, posta modunda bir HTTP sorgusu sorunlarken bir istemci olarak işlev görür, diğer taraftan, Web sunucusu isteğin işlendiği ve yanıtın yanındadır. XML belgeleri değişim olarak kullanılır.
Örneğin, muhasebe programının basit bir kurumsal ERP sisteminde (ACS muhasebesi), bir fatura için belirli bir istek oluşturmak ve bir depoya (ACS deposu) olan bir dala aktarmak gerekir. Sanat, sistemin bir B2B'sini oluştururken, bir işletme, bir işletme, ürünlerin kullanılabilirliğini (satın alma talebinde bulunur) tedarikçisinden, sistemin bir B2B'si oluştururken benzer bir ortamdır.
Kurumsal A ve Programı bir müşteri olarak işlev görür. Depo, SQL Server'da bir depo BD kompleksi olan tedarikçiye hizmet vermektedir. Borsa, Kurumsal Bir Web Sunucusu Tedarikçisi V ile gerçekleştirilir.
Aşağıda aşağıdaki tipik değişim algoritmasıdır:
Figür 3.
- Kurumsal A.başlatmak İşlem A.(Ürün siparişi), web istemcisi olarak işlev görür.
- İşlem A.bir XML belgesi oluşturur (örneğin, bir fatura) ve bir web tedarikçisi sunucusuna Gönderilen bir HTTP sorgusu olarak iletir. Bir URI olarak bir işleme uygulama tanımlayıcısı kullanılır. URI, her tür için her tür belge veya birey için aynı olabilir. Hepsi B2B (Web) sunucusunun yapısına bağlıdır.
- Web Sunucusu isteği analiz eder ve sunucuyu oluşturur İşlem B.Bir XML belgesini parametre olarak geçirerek.
Web sunucusundaki işlem, ASP sayfası, CGI (ISAPI) - uygulama veya Java Sevrlet (Sunucu Uygulaması) olarak başlatılır ve işlenir. - İşlem B.- SQL veritabanı sunucusuna bir istek oluşturur.
- SQL Server, veritabanındaki gerekli işlemleri yapar, cevabı oluşturur ve iade eder. İşlem B..
- SQL Server'ın cevabında İşlem B. Bir XML belgesi oluşturur (cevap) ve HTTP isteğine istemci uygulamasına bir cevap olarak izin verir.
- Ayrıca, istemci tarafındaki duruma bağlı olarak, yeni bir HTTP sorgusu oluşturulur veya oturum sona erer.
Belge yönetimi organizasyonu hakkında birkaç kelime.
XML değişim sisteminin genel geliştirilmesinin genel kuralı:
- ilk olarak- Elektronik belgelerin akışının devresinin geliştirilmesi ve yapıları;
- İkinci olarak- İşlemlerin fonksiyonlarının tablolarının geliştirilmesi (alt işlemler) yani. Hangi XML belgesinin her bir işlemi uygulayacağı ile ilgili hangi işlevi.
Bir HTML belgesi gibi her bir XML belgesi, bir mesaj başlığından (bilgi mahkum) ve bir mesaj gövdesinden oluşmalıdır (bu bilgiyi isteğe cevap vermek için etiketlemek suretiyle "sorgu için). XML belgesinin doğru bir şekilde oluşturulması için, örneğin "başlık" ve "Talep" nin iki bileşeni için gereklidir. Standart belgenin görünümü aşağıda sunulmuştur:
Ünvan (Şekil 4), belgenin HTML'nin aksine, iletilen belgenin türü ve işleme işlemi hakkında bilgi dahil olmak üzere farklı tür hizmet bilgileri içermelidir. Belgenin bilgilendirme işlemi alındı, yani. Anlamlı kısmı etiketle çerçevelenmiştir. Başlık yapısının her tür belge için birleşmesi gerektiği belirtilmelidir.
Sunucu tarafından çalışan işlem için, işleme algoritması, aşağıdaki gibi inşa etmek için tercihen (ancak gerekli değildir)
Şekil 6.
Bir müşteri parçası oluştururken bazı asıl anlar
Daha önce açıklandığı gibi, bir XML belgesi oluştururken sunumunu bir DOM model biçiminde kullanır. Aşağıda, XML mesaj başlığı programının Delphi metninin metninin bir örneğidir.
prosedür.Thread1.headercreate (Gönderen: TOGJECT); var. // Oluşturmak için Duyuru Duyuru Gerekli CODOC: CODOMDOCUMENT; // xmldomdocument nesnesi DOC: DOMDOCUMENT; R: ixmldomelement; Düğüm: ixmldomelement; // domText txt: ixmldomtext; // domattribute attr: ixmldomattribute; başla. // dom belgesi oluşturma DOC: \u003d codoc.create; Doc.set_async (yanlış); // ilk başlatma dom belgesi Doc.loadxml ("CODOC: CODOMDOCUMENT ve DOC: DOMDOCUMENT değişkeni ve CREATE yönteminin oluşturulması (DOC: \u003d codoc.create;) bir kez yapıldığı belirtilmelidir. Değişken beyanı, küresel değişkenlerin açıklamasıdır ve yerel prosedürde değil, bu örnekte görünürlük için gösterildiği gibi (yani DOMDocument Tipi bir program modülünün bir küresel değişkeni).
Yukarıdaki programın sonucu, XML belgesi örneğimize göre oluşturulan başlık olacaktır: Şekil 5'te gösterilmiştir.
Şekil 5.
Şekil 6.
Bilgilerin XML belgeleri biçiminde iletmenin ana avantajı, hem alınan ve iletilen taraftaki DBM'lerdeki tabloların bağımsız yapısını kullanarak bir mesajın oluşturulması mümkündür. Örneğimizi kullanarak, işletmenin faturalarıyla ilgili bilgileri, Şekil 6'da gösterilen yapının DBM'lerinden aktarılması gerekmesine izin verin.
Fatura içeren bir Fatura içeren bir XML belgesi oluşturmak için, fatura hakkında bilgi içeren bir SQL isteği (sorgu a):
Seçmek * Invoice_general'den Nerede. İnvoiNum \u003d: num SeçmekMallar, quulity, fiyat, hz_cod Dan.Mal Nerede. İnvoiNum \u003d: num //: num - Fatura numarasını belirten parametre.Aşağıda, XML belgesinin gövdesini oluşturan programın bir parçasıdır:
prosedür. Tthread1.databodycreate (Gönderen: TOBJECT); var. // sınıflar ve xmldomdocument // codoc: codomdocument; // tüm modül için küresel olmalı. // DOC: DOMDOCUMENT; // Domelement nesnelerinin duyurusu R: ixmldomelement; // domelement; Düğüm, node2: ixmldomelement; Node3, node4: ixmldomelement; // domText txt: ixmldomtext; STR: Dize; // Fatura numarası: tamsayı; - Global Değişken - // Masching 987654 // Querya, Queryb: Dize; - Global Değişken, // Talep Talebini Sürdürme // Querya - İstek ve Genel Bilgiler Fatura // Queryb - Sorgu B // Fatura'da açıklanan mallar hakkında bilgi (metne bakınız) başla. Query.close; // "A talep" metninde bakınız. Query.text: \u003d querya; // yürütme isteyin Query.execsql; Query.open; // kök öğenin adresini alın R: \u003d doc.get_documentelement; Node2: \u003d DOC.CreateEnment ("istek"); // domelement oluştur (etiket) Düğüm: \u003d doc.CreateEnment ("fatura"); // Kök için bir öğe ekleme R.appendchild (node2); // içine bir öğe ekleme Node2. Appendchild (düğüm); // domelement oluştur (etiket) Node3: \u003d DOC.CreateEnment ("Defurture"); // içine bir öğe ekleme Düğüm. Appendchild (node3); // "Defurtur" alanına itiraz et Str: \u003d query.fieldbyname ("depres deneyin"). Asstring; // bir metin oluşturma düğümü \u003d alan değeri // düğüm atama değeri // Metin Düğümü, Değişken STR Node.appendchild (txt); // Etiket için benzer işlemlerBu prosedürün bir sonucu olarak, XML belgesinin aşağıdaki metni oluşturulur:
Açık yöntem, bir sorgu oluşturmak için kullanılır. İxmlhttprquest:
prosedür. Açık (Const Bstrmethod, - Yöntem Tipi \u003d "" BTRURL, - URL Varasync Sunucu Adresi, - Asenkron / Senkron İletişim Modu \u003d True Bstruser, - BSTRassword Kimlik Doğrulama için Kullanıcı Adı) - ŞifreBelge işlemenin bir sunucu parçası oluşturma
Daha önce belirtildiği gibi, HTTP isteğinin işlenmesi, CGI uygulamaları veya Java Servlet'leri yapılabilir. ASP sayfalarını yazmak için olası seçenekler. Ancak bu durumda, veri iletimi yalnızca sorgu dizesini kullanarak "GET" ile mümkündür. Her ne kadar, ASP sayfası isteğinin HTTP işlenmesi, CGI uygulamasından daha verimli çalışır. Bununla birlikte, bence, herhangi bir fark olmadan, soruyu nasıl çözmek ve daha önemlisi, bir işlem programı nasıl oluşturulur ve ne demektir.
Önceki bölümden bir XML belge oluşumu seçeneklerini gözden geçirirsek, sunucu uygulamasının görevi XML belgelerinin tam tersidir. Aşağıda, XML belgesini analiz eden programın bir parçasıdır:
prosedür.Tthread1.dataparser (Gönderen: TOBJECT); var. // Domelement nesnelerinin duyurusu R, fnode: ixmldomelement; Str, dosya adı: string; Parm: Dize; // Soklass duyurusu ve Codocxml, codocxsl, codocresult: codomdocument; // xmldomdocument nesnesi XMLDOC, XSLDOC, Sonuç: DOMDOCUMENT; // httpstr: string; - HTTP sorgu dizesini içeren bir genel değişken Başla. Xmldoc: \u003d codocxml.create; Xmldoc.loadxml (httpstr); // kök öğenin adresini alın R: \u003d doc.get_documentelement; // öğenin değerini elde etme Fnode: \u003d r.SelectingLenode ("// Typedocument"); // bir öznitelik değeri kimliği al \u003d "Sipariş" Dosya adı: \u003d fnode.getattibute ("id"); // ve dosya adını oluşturma Sipariş. Dosya adı: \u003d dosya adı + ". XSL"; // bir belge oluşturma xsldoc Xsldoc: \u003d codocxsl.create; Xsldoc.loadxml (dosya adı); // bir xmldoc belgesi oluşturma SonuçDoc: \u003d codocresult.create; // Senkron işleme modunun ayarlanması Sonuçdoc.set_async (yanlış); // İndirme çekini yükleme Sonuçdoc.validateonparase: \u003d true; // XMLDOC'yi XSL şablonuyla sıkın Xmldoc.Transformnoc, SonuçDoc (xsldoc, sonuç); // değişken str, metin değerine atanır // nihai belge. STR: \u003d SonuçDoc.Text; // Arama Öğesi Fnode: \u003d r.SelectingLenode ("// invoicenumber"); // ve öğenin değerini almak Parm: \u003d fnode.text; // erişim isteğini kapatır Query.close; Query.text: \u003d str; // parametrenin değerini atama Query.params.asstring: \u003d parm; // yürütme isteyin Query.execsql; son;Tüm ayrıştırma aralığı, her bir belge türü için ayrı ayrı oluşturulan XSL şablonunu uygulamaktır. Analiz sonucu, SQL sorgu dizesidir. Sonuç olarak, oluşturulan SQL Query String'in uygulanması, DBMS'de gerekli değişiklikleri yapacaktır.
Şablondan ayrıştırma kullanmanın avantajı da bazı veri esnekliğini ortaya çıkardığı ve algoritmanın çalışma kodunun program kodundan tamamen bağımsız olmasıdır. Aşağıda, belge türünü işlemek için kullanılan XSL şablonunun metnidir.
Yukarıdaki örneği açıklarken, etiket çiftlerinin kullanımının ve resmi olduğu belirtilmelidir, çünkü Ayrıştıktan sonra, ortaya çıkan XML belgesinde en az bir düğüm bulunmalıdır. SonuçDoc.Text metodu, XML belgesinin sonuçlandırılmasının analizi sırasında elde edilen metin değerini atar. Bu durumda, değer tümü etiket çiftlerinin çerçeveli ve yani Bir SQL isteği oluşturduk.
Program yazmanın bir başka özelliği, SQL parametresini kullanma olasılığı not edilmelidir. : Num. Parametrenin kullanılması, XSL şablonunun metnini basitleştirmenize olanak sağlar. Tanım XML belge düğümlerinin karşılık gelen elemanlarının değeri, başlangıçta karşılık gelen düğümün adını seçerek, örneğin:
XSL hakkında kısaca
XSL kısaltması, genişletilebilir stil sayfası dil - stil tablo biçimlendirme dilinden (XML verileri) geliyor. Genişletilebilir stil sayfası dilinden (XSL) başlığından (XSL) açık olduğundan, XML verilerini biçimlendirmek için kullanılır. W3C XSL'nin tanımı gereği iki bölümden oluşur:
- XSLT - XSL dönüşümü. XML belgelerini dönüştürmek veya biçimlendirmek için kullanılan dil. Böylece, XSLT'yi kullanarak, birden fazla veri ve veri sunum formunun farklı bölümlerini alabiliriz.
- Biçimlendirme öğeleri. Bu elemanlar, XSL kullanılarak işlendikten sonra, tipografik veri tasarımının tüm unsurlarını içerir. Sadece HTML sayfalarını oluşturmak için kullanılır.
XSLT'yi kullanma, ihtiyacınız olan XML dosyasındaki verileri seçebilir ve kullanıcıyı sağlamak için formda düzenleyebiliriz. Örneğin, bizim durumumuzda, XML verilerini bir SQL sorgusu olarak dönüştürdük. Klasik XSL uygulaması genellikle verileri bir HTML sayfası veya RTF dosyaları biçiminde nadir bir gösterim olarak biçimlendirir.
XSL dosyası, XML veri dönüşümünün gerçekleştirileceği şablon (şablon) açıklanmaktadır. XSL şablonlarına geri dönerek, XSLT (direktiflerde) aşağıdaki unsurlar tahsis edilebilir:
XSL Direktifi | açıklama |
---|---|
xSL: Uygula şablonları | Direktif, uygun şablonların uygulamasını belirten \u003d "Şablon adı" |
xSL: nitelik. | Öznitelik ağacını oluşturur ve çıkış öğesine, adı \u003d "öznitelik adı" parametresi, ad alanındaki URI (Namespace Öneki) |
xSL: çağrı şablonu | bir şablona neden olur, öznitelik adı \u003d "Şablonda URI" |
xSL: Seç. xSL: Ne zaman. xSL: Aksi takdirde. |
koşulla bir seçim yapılması XSL: Expr \u003d "Komut dosyasında ifadeyi hesaplama", dil \u003d "Dil adı" test \u003d "Hesaplanan İfade" |
xSL: Yorum | Çıktı belgesinde bir yorum oluşturur |
xSL: Kopyala. xSL: kopyası |
geçerli düğümü çıkış kaynağındaki kopyalar veya belge parçasını, seçilen \u003d "Kaynak düğümünün adı" niteliğinin seçildiği düğüme yerleştirir. |
xSL: Eleman | İsme göre bir çıktı elemanı oluşturur, öznitelik adı \u003d "Element ad", ad alanı \u003d "NAME alanına URI referansı" |
xSL: her biri için | Şablonu tüm düğümler liste düğümlerine yeniden uygulayın, öznitelik düğümünün bir listesini ayarlar. |
xSL: Eğer. | koşullar Kontrolü, bir ifade olarak test niteliği tarafından ayarlanır. |
xSL: dahil | harici bir şablon içerir, href \u003d "URI referansı" |
xSL: çıktı | Çıktı sonucunu belirtir, yöntem özniteliği "XML", "HTML" veya "Metin" olabilir |
xSL: param | parametre değerini, adını \u003d "parametre adı" özniteliğini belirtir, Seçin \u003d "Değer" |
xSL: İşleme-talimat | İşleme için talimatlar oluşturur, öznitelik adı \u003d "Ad Proses Talimatları" |
xSL: Sırala. | birçok düğümü, özniteliklerini seçer \u003d "düğüm adı", veri türü \u003d veri türü ("metin" | "numarası" | QNAME), Sipariş \u003d sıralama yönü ("Yükselen" | "Azalan") |
xSL: Stil sayfası. | xSL şablon belgesini tanımlar, XSLT için kök öğesidir. |
xSL: Şablon. | xSL şablonunu belirtir, ad \u003d "Uri Prefix özniteliğine", maç \u003d "Şablonun geçerli olduğu düğüme not edin" |
xSL: Metin. | Çıkış akışına metin oluşturur, Devre Dışı Bırak-Çıkış-Escaping \u003d "Evet" veya "Hayır" niteliği, ESC karakterleri oluşturma yeteneğini gösterir. |
xSL: değeri | seçilen düğümün değerini metin olarak ekler, Değerin alındığı seçilen \u003d "Düğüme işaretçi" özniteliğini seçin. |
xSL: değişken | değişken sınırların değerini belirtir, ad özniteliği \u003d "Değişken Adı", SELECT \u003d "Değişkenin değerini hesapla" |
xSL: ile param | parametreyi şablona uygular, ad özniteliği \u003d "Parametre Adı", Seçin, geçerli bağlamı, varsayılan değeri hesaplamak için \u003d İfade "seçeneğini seçin. |
Sonuç
Sonuç olarak, Standart XML ayrıştırıcısının kullanıldığı belirtilmelidir. msxml.dll.xML belgelerini ayrıştırmanın ve oluşturmanın tek yolu değildir. Örneğin, bileşenleri etkili bir şekilde kullanmak için XML belgeleri oluşturmak için Tpageproduser.ve Ttableproduser.. Ancak bu makale yalnızca pratikte bir DOM modelini uygulamanın genişliğini ve olasılığını vurgulamaktadır.
Yazar, konunun alaka düzeyine, genel içeriğin, sunum stilinin yanı sıra, bir eşya koleksiyonu ve kapsayan kitapların serbest bırakılmasını sağlayacak diğer tüm yorumlar hakkında geri bildirim için çok minnettar olacaktır. E-ticarette XML belgelerinin kullanımının pratik tarafının konusu. Elektronik belgelerin uygulamasının pratik tarafı hakkında daha fazla bilgi için, yazarın web sitesinde www.edocs.al.ru adresinden öğrenebilirsiniz, ayrıca kaynak metinleri ve örnekleri yerleştirmek de planlanmaktadır.
XML dili giderek daha fazla bilgi depolamak, uygulamalar ve web düğümleri arasında paylaşır. Birçok uygulamada, bu dil, XML verilerini dışa aktarmak ve içe aktarmak için diğerlerdeki temel verilerin temel bir depolanması olarak kullanılır. Bundan, geliştiricilerin kendi uygulamalarınızda XML verilerini nasıl kullanacağınızı düşünmelerinin zamanı gelmesidir.
Bu yazıda, XML Belge Nesne Modelini (DOM) ve Microsoft - Microsoft XML DOM tarafından uygulanmasını düşüneceğiz.
XML DOM, geliştirici nesneleri XML dosyalarını indirmek ve işlemek için sağlayan bir nesne modelidir. Nesne modeli aşağıdaki ana nesnelerden oluşur: XMLDOMDOCUMENT, XMLDOMNODELIST, XMLDOMNODE, XMLDOMNAMEDNODEMAP ve XMLDOMPARSEERROR. Bu nesnelerin her biri (XMLDOMPARSEError hariç), nesne hakkında bilgi edinmek, nesnenin değerlerini ve yapısını manipüle etmenin yanı sıra XML belge yapısı boyunca hareket etmenin özelliklerini ve yöntemlerini içerir.
XML DOM'un ana nesnelerini düşünün ve Borland Delphi'de kullanımlarının birkaç örneğini verin.
Borland Delphi'de XML DOM kullanma
Delphi uygulamalarında Microsoft XML DOM'u kullanmak için, uygun tür kitaplığını projeye bağlamanız gerekir. Bunu yapmak için projeyi yürütüyoruz | Tip Kitaplığı'na İçe Aktarma Türü Kitaplığı iletişim panelinde, genellikle Windows \\ System \\ msxml.dll dosyasında bulunan Microsoft XML sürüm 2.0 kütüphanesini (sürüm 2.0) seçin.
Birim Oluştur düğmesine bastıktan sonra, MSXML_TLB arabirim modülü oluşturulacak, bu da XML DOM nesnelerini kullanmamıza izin verilir: MSXML.dll kütüphanesinde uygulanan DOMDocument, XmlDocument, XMLHTTPREQUEST ve bir dizi başkalarının. MSXML_TLB modülüne bağlantı, kullanım listesinde listelenmelidir.
XML DOM cihazı
Belge Nesne Modeli, dallardan oluşan bir ağaç yapısı biçiminde bir XML belgesini temsil eder. XML DOM yazılım arayüzleri, uygulamaların belge ağacını gezinmesine ve dallarını manipüle etmelerine izin verir. Her dal, hangi ebeveyn ve bağlı ortaklıkların belirlendiğine göre belirli bir tür (DOMNODETYPE) olabilir. Çoğu XML belgesinde, unsur, nitelik ve metin dallarının dallarını bulabilirsiniz. Öznitelikler (öznitelik) özel bir dal türüdür ve bağlı olmayan dal değildir. Öznitelik yönetimi için, XML DOM nesneleri tarafından sağlanan özel yöntemler kullanılır.
Önerilen World Wide Web Consorsium (W3C) arayüzlerini uygulamanın yanı sıra, Microsoft XML DOM, XSL, XSL desenlerini, ad alanlarını ve veri türlerini destekleyen yöntemleri içerir. Örneğin, SelectNodes yöntemi, belirli bir bağlamda dalları aramak için XSL şablonları sözdizimini (XSL desen sözdizimi) kullanmanıza izin verir ve TransformNode yöntemi, XSL'nin dönüşümleri gerçekleştirmek için kullanılmasını destekler.
XML belgesini test et
Bir XML belgesine bir örnek olarak, aşağıdaki yapıya sahip olan Müzik CD-ROM kataloğunu alın:
Şimdi XMLDOMDocument nesnesiyle başlayacak olan nesne modeli XML DOM, aşinalık görmeye başlamaya hazırız.
XML Belgesi - XMLDOMDocument Nesnesi
XML belgesiyle çalışmak indirmesi ile başlar. Bunu yapmak için, indirilen belgenin URL'sini belirten yalnızca bir parametreye sahip olan yük yöntemini kullanıyoruz. Dosyaları yerel bir diskten indirirken, yalnızca tam dosya adı belirtilir (bu durumda bu durumda Dosya: /// Protokol). XML belgesi bir dize olarak kaydedilirse, LoadXML yöntemi böyle bir belgeyi indirmek için kullanılmalıdır.
Bir belgeyi indirme yöntemini (senkron veya eşzamansız) kontrol etmek için, Async özelliği kullanılır. Varsayılan olarak, bu özellik, belgenin asenkron olarak yüklendiğini ve kontrolün tamamen yükleninceye kadar bile uygulamaya iade edildiğini belirten geçerlidir. Aksi takdirde, belge senkronize olarak yüklenir ve ardından belgeyi yüklemek veya değil, öğrenmek için ReadyState özelliğinin değerini kontrol etmeniz gerekir. Ayrıca, ReadyState özelliğinin değerini değiştirirken kontrol alacak bir ONREADYSTATECHANGANGE Olay İşleyicisi de oluşturabilirsiniz.
Aşağıda, yük yöntemini kullanarak bir XML belgesinin nasıl indirileceği gösterilmiştir:
Kullanıcılar ... MSXML_TLB ... Prosedür TForm1.Button1Click (Gönderen: TOGJECT); Var xmldoc: ixmldomdocument; XMLDOC: \u003d codomdocument.create'e başla; Xmldoc.async: \u003d false; Xmldoc.load ('C: \\ Data \\ Data.xml'); // // İşte // XML belgesini ve şubelerini // XMLDOC: \u003d NIL; son;
Belge yüklendikten sonra, özelliklerine başvurabiliriz. Böylece, NODENAME özelliği #Document değerini içerecektir, NOMETYPESTRING özelliği bir belge değeridir, URL özelliği: /// C: /Data/Data.xml değeridir.
İşleme hatasıdır
Özel ilgi alanı, yüklendiğinde belgenin işlenmesi ile ilişkili özelliklerdir. Böylece, ParseError özelliği, işlem işlemi sırasında meydana gelen hata bilgilerini içeren bir XMLDOMPARSEErrorror nesnesini döndürür.
Bir hata işleyicisi yazmak için aşağıdaki kodu ekleyebilirsiniz:
Var xmlError: ixmldomparseError; ... xmldoc.load ('C: \\ Data \\ Data.xml'); XmlError: \u003d xmldoc.parseError; Eğer xmlerror.errorcode.<> 0 O zaman // // burada hatayı işleriz // else memo1.lines.add (xmldoc.xml); ... xmldoc: \u003d nil;
Hata durumunda hangi bilgilerin iade edildiğini öğrenmek için aşağıdaki dizin öğesini değiştirin:
kapanış elemanını çıkarma
Şimdi XMLDOMPARSEErrorror nesnesinin özelliklerini döndüren kodu yazın:
XmlError: \u003d xmldoc.parseError; Eğer xmlerror.errorcode.<> 0 sonra XMLError, Memo1.line ile ekle ('Dosya:' + URL); Ekle ('kod:' + inttostr (errorcode)); Ekle ('Hata:' + Sebep); Ekle ('Metin:' + SRCText); Ekle ('satır:' + inttostr (satır)); Ekle ('pozisyon:' + inttostr (LINEPOS)); END ENTER Memo1.lines.add (xmldoc.xml); Son;
ve başvurumuzu yerine getirin. Sonuç olarak, aşağıdaki hata bilgilerini alırız.
Yukarıdaki örnekte görülebileceği gibi, XMLDOMPARSEError nesnesi tarafından döndürülen bilgiler, hatayı yerelleştirmek ve oluşmasının nedenini anlamak için yeterlidir.
Şimdi kapanış öğesini geri yükle
Belge ağacına erişim
Belge ağacına erişmek için, kök elemanı alabilir ve daha sonra bağlı ortaklıklarından geçebilir veya belirli bir şube bulabilirsiniz. İlk durumda, kök elemanını Belgesel Mülkiyet'i aracılığıyla alırız, bu da XmldOmnode tipi bir nesneyi döndürür. Aşağıda, her çocuk elemanının içeriğini elde etmek için Belgesellement Mülkiyetinin nasıl kullanılacağı gösterilmiştir:
Var düğümü: ixmldomnode; Kök: ixmldomelement; I: tamsayı; ... root: \u003d xmldoc.documentelement; I için: \u003d 0 root.ChildNodes.Length-1 düğümü başlar: \u003d root.childnodes.item [i]; Memo1.lines.add (node.text); Son;
XML belgemiz için aşağıdaki metni alıyoruz.
İlk bağlı ortaklığın altındaki bir tür özel şube veya şube seviyesi ile ilgileniyorsak, XMLDOMDocument nesnesinin NODEFROMID yöntemini veya GetElembyTagname yöntemini kullanabiliriz.
NODEFROMID yöntemi, XML şemasında veya belge türü tanımında (DTD) tanımlanan benzersiz bir tanımlayıcı belirtilmesini gerektirir ve bu tanımlayıcıyla bir dal döndürür.
GetElemementBytagName yöntemi, belirli bir eleman (etiket) olan bir dize göstergesi gerektirir ve tüm dalları bu öğeyle döndürür. Aşağıda, CD-ROM dizinimizdeki tüm sanatçıları bulmak için bu yöntemin nasıl kullanılacağı gösterilmiştir:
Düğümler: ixmldomnodelist; Düğüm: ixmldomnode; ... düğümler: \u003d xmldoc.getelementsbytagname ('sanatçı'); I için: \u003d 0 Nodes.Length-1, düğüme başlar: \u003d nodes.item [i]; Memo1.lines.add (node.text); Son;
XML belgemiz için aşağıdaki metni alacağız.
XmldOmnode SelectNodes yönteminin belgenin dallarına erişmenin daha esnek bir yolu olduğunu unutmayın. Ancak bu konuda biraz daha düşük.
Belge Şubesi - XMLDOMNODE Nesnesi
XMLDOMNODE nesnesi bir belge dalıdır. Belgenin kök elemanı elde edildiğinde bu nesneyi zaten bulduk:
Kök: \u003d xmldoc.documentelement;
XML belgesinin şubesinde bilgi edinmek için, XMLDOMNODE nesnesinin özelliklerini kullanabilirsiniz (Tablo 1).
Şubede depolanan verilere erişmek için, genellikle NODEVALUE özelliğini (Nitelikler, metin dalları, yorumlar, işleme ve CDATA bölümleri için talimatlar için kullanılabilir) veya dalın metin içeriğini veya NOMETYPEDVALUE özelliğini kullanan metin özelliğini kullanın. Ancak ikincisi, yalnızca yazılan elemanlı dallar için kullanılabilir.
Belge ağacında hareketli
XMLDOMNODE nesnesi, belge ağacından geçmenin çeşitli yollarını sağlar. Örneğin, ana şubeye erişmek için, ParentNode özelliği kullanılır, çocuk dallarına erişim, çocuk şubelerine erişim (XmldChild tipi), FirstChild ve Lastchild (Tip XmldOmnode), vb. OwnerDocument özelliği, XML belgesinin kendisini tanımlayan bir XMLDocument nesnesi döndürür. Yukarıdaki özellikler, belge ağacından geçmeyi kolaylaştırır.
Şimdi XML belgesinin tüm dallarını aşacağım:
Kök: \u003d xmldoc.documentelement; I için: \u003d 0 root.ChildNodes.Length-1 düğümü başlar: \u003d root.childnodes.item [i]; Eğer node.haschildnodes sonra getchilds (düğüm, 0); Son;
Yukarıda belirtildiği gibi, SelectNodes nesnesi XmldOmnode, belgenin dallarına erişmenin daha esnek bir yolu sağlar. Ek olarak, yalnızca belgenin ilk dalını döndüren bir SELECTSINGLENDE yöntemi var. Bu yöntemlerin her ikisi de, şubeleri aramak için XSL şablonlarını belirlemenizi sağlar.
CD şubesi ve enflasyonu olan tüm dalları çıkarmak için SelectNodes yöntemini kullanma işlemini göz önünde bulundurun.
Kök: \u003d xmldoc.documentelement; Düğümler: \u003d root.SelectNodes ('CD / Price');
Düğüm koleksiyonu tüm switter fiyat cd dallarını yerleştirilecektir. XSL şablonlarının tartışılması biraz sonra geri döner.
Kızı dalları tarafından manipülasyon
Bağlı ortaklıkların manipülasyonu için, XMLDOMNODE nesnesinin yöntemlerini kullanabiliriz (Tablo 2).
İlk diskin kaydını tamamen silmek için aşağıdaki kodu gerçekleştirmeniz gerekir:
Var xmldoc: ixmldomdocument; Kök: ixmldomnode; Düğüm: ixmldomnode; Xmldoc: \u003d codomdocument.create; Xmldoc.async: \u003d false; Xmldoc.load ('C: \\ Data \\ Data.xml'); // kök elemanı root: \u003d xmldoc.documentelement; Düğüm: \u003d kök; // ilk bağlı ortaklığı kaldır node.removechild (node.firstchild);
Lütfen bu örnekte ilk bağlı ortaklığı kaldıracağız. İlk bağlı ortaklığın ilk elemanının nasıl çıkarılacağı, aşağıda gösterilmiştir:
Var xmldoc: ixmldomdocument; Kök: ixmldomnode; Düğüm: ixmldomnode; Xmldoc: \u003d codomdocument.create; Xmldoc.async: \u003d false; Xmldoc.load ('C: \\ Data \\ Data.xml'); // kök elemanı root: \u003d xmldoc.documentelement; // ve ilk bağlı bağlantı düğümü: \u003d root.firstchild; // ilk bağlı ortaklığı kaldır node.removechild (node.firstchild);
Yukarıdaki örnekte, ilk şubeyi kaldırmadık.
Şimdi yeni bir dal ekleyin. Aşağıda, yeni bir müzik CD-ROM'unun yeni bir kaydı ekleneceğini gösteren bir kod var:
Var newnode: ixmldomnode; Çocuk: ixmldomnode; ... // Yeni bir şube oluşturun -
Yukarıdaki kod, yeni bir dal eklemek için aşağıdaki eylem sırasını gösterir:
- Createnode kullanarak yeni bir dal oluşturma:
- createnode yöntemini kullanarak bir öğe oluşturma;
- appendchild yöntemiyle şubeye bir eleman ekleme;
- Öğenin değerini metin özelliği aracılığıyla ayarlamak;
- ... tüm öğeler için tekrarlayın.
- Appendchild tarafından belgeye yeni bir dal ekleme.
Appendchild yönteminin bir ağacın sonunda bir dal eklediğini hatırlayın. Ağacın belirli bir yere bir dal eklemek için, ekleme yöntemini kullanmanız gerekir.
Dallar - Xmldomnodelist nesnesi
XmlNodelist nesnesi, selectNodes veya getAlementsbytagName yöntemleri kullanılarak oluşturulabilecek bir dalın listesini içerir ve ayrıca ChildNodes özelliğinden de elde edilir.
Bu nesnenin kullanımını "belge ağacında hareket etme" bölümünde verilen örnekte kullandığımızdan zaten kullandık. Burada ayrıca bazı teorik yorumlar veriyoruz.
Listedeki dalların sayısı, uzunluk özelliğinin değeri olarak elde edilebilir. Dalların 0 ila uzunluk-1 arasında endeksleri vardır ve her bir dal, karşılık gelen dizin ile bir öğe dizisi öğesi aracılığıyla mevcuttur.
Şubeler listesinde hareket etmek de, bir sonraki şubeyi listedeki bir sonraki şubeyi döndüren veya geçerli dal ikincisi ise NIL'sini kullanarak da gerçekleştirilebilir. Listenin en üstüne dönmek için sıfırlama yöntemini aramanız gerekir.
Belgeleri Oluşturma ve Kaydetme
Öyleyse, şube ve elemanları mevcut XML belgelerine nasıl ekleyebileceğinize baktık. Şimdi "sinek üzerinde" bir XML belgesi oluşturun. Her şeyden önce, belgenin sadece URL'den değil, aynı zamanda her zamanki dizeden de yüklenebileceğini hatırlatacağız. Aşağıda, daha sonra geri kalan elemanları dinamik olarak oluşturmak için kullanılabilecek bir kök elemanın nasıl oluşturulduğu gösterilmiştir (bağlı ortaklıkların manipülasyonu "):
Var xmldoc: ixmldomdocument; Kök: ixmldomnode; Düğüm: ixmldomnode; S: widestring; ... s: \u003d '
Bir XML belgesi oluşturduktan sonra, Kaydet Yöntemini kullanarak dosyaya kaydedin. Örneğin:
Xmldoc.Save ('C: \\ Data \\ newcd.xml');
Dosyada kaydetmeye ek olarak, Kaydet Yöntemi, bir XML belgesini yeni bir XMLDOMDocument nesnesinde kaydetmenize olanak sağlar. Bu durumda, belge tam işleme ve sonuç olarak yapısını ve sözdizimini kontrol eder. Aşağıda bir belgenin başka bir nesneye nasıl kaydedileceği gösterilmiştir:
Prosedür tform1.button2Click (Gönderen: TOGJECT); Var xmldoc2: ixmldomdocument; BAŞLAYIN XMLDOC2: \u003d codomdocument.create; Xmldoc.save (xmldoc2); Memo2.lines.add (xmldoc2.xml); ... xmldoc2: \u003d nil; son;
Sonuç olarak, kaydetme yönteminin bir XML belgesini, ISTREAM, ISETStream veya IPESTREAMINIT arayüzlerini destekleyen diğer COM nesnelerine kaydetmenize izin veriyoruz.
XSL şablonlarını kullanma
XmldOmnode Nesnesi SelectNodes yöntemini tartışıyorsanız, belgenin dallarına erişmenin daha esnek bir yolu olduğunu belirttik. Esneklik, dalları seçmek için bir kriter olarak, bir XSL şablonu belirleyebilirsiniz. Bu tür şablonlar, XML belgelerinde bilgi aramak için güçlü bir mekanizma sağlar. Örneğin, dizinimizdeki müzik CD-ROM'unun tüm adlarının bir listesini almak için aşağıdaki sorguyu takip edebilirsiniz:
Sanatçıların Amerika Birleşik Devletleri'nde yayınlandığı disklerin olup olmadığını öğrenmek için talep aşağıdaki gibi oluşturulur:
Düğümler: \u003d root.selectnodes ('CD / Sanatçı');
Aşağıda, dizinde ilk diskin nasıl bulunacağını gösterilir:
Düğümler: \u003d root.selectNodes ('CD / Title');
ve son olarak:
Düğümler: \u003d root.selectNodes ('CD / Title');
Bob Dilan disklerini bulmak için aşağıdaki sorguyu gerçekleştirebilirsiniz:
Düğümler: \u003d root.SelectNodes ('CD [$ ARST \u003d "Bob Dylan"] / unvanı');
ve 1985'ten sonra yayınlanan disklerin bir listesini almak için aşağıdaki sorguyu gerçekleştiriyoruz:
Düğümler: \u003d root.selectNodes ('CD / Title');
XSL sözdiziminin daha ayrıntılı bir tartışması ayrı bir yayını gerektirir. Okuyucuları iletmek ve daha fazla araştırmayı zorlamak için, XSL'nin olası kullanımına sadece bir küçük örneği vereceğim. Dizini normal HTML tablosuna dönüştürmemiz gerektiğini varsayalım. Geleneksel yollardan yararlanarak, tüm ağaç dallarını ve karşılık gelen etiketleri oluşturmak için elde edilen her bir madde için sıralamalıyız.
XSL'yi kullanarak, sadece neyi ve nasıl dönüştürüleceğini gösterdiğimiz bir şablon (veya stil tablosu) oluştururuz. Sonra bu şablonu kataloğumuza uyguladık - ve hazır: Bizden önce, dizini tabloya dönüştüren XSL şablonunun metni (Liste 2).
XSL şablonunun kataloğumuza bindirme kodu şöyle görünür:
Prosedür tform1.button2Click (Gönderen: TOGJECT); Var xsldoc: ixmldomdocument; XSLDOC: \u003d codomdocument.create; Xsldoc.load ('C: \\ Data \\ Data.xsl'); Memo2.Text: \u003d xmldoc.transformnode (xsldoc); Xsldoc: \u003d nil; son;
XSL'nin tartışmamızı tamamlayarak, şu anda bu dilin, farklı XML belgeleri arasında hem de belgeleri biçimlendirme için aktif olarak kullandığı söylenmelidir.
Sonuç
Oldukça anlaşılabilir sebeplerden dolayı, bir makalede tüm Microsoft XML DOM nesnelerinin tümünü değerlendirmek ve kullanımlarına örnekler getirmek imkansızdır. Burada sadece XML DOM uygulamalarında kullanımdaki ana konulara dokunuyoruz. Sekmesinde. Şekil 3, Microsoft XML DOM'da uygulanan tüm nesneleri göstermektedir.
ComputerSpress 12 "2000
Delphi'de Sipariş Görevleri Çözme
Delphi, öğrencilerin en sık öğrenme sürecinde tanıştığı ikinci programlama dilidir. Bu, nesne odaklı programlamanın öğrenilmesinin başlangıcıdır. Ben, bir öğrenci olarak, kendi için bir hesap makinesi yazmaktan daha kolay bir yöntem olmadığı sonucuna varmıştır. İki sayının eklenmesinin temel işlevini gerçekleştirseniz bile, bu zaten çok fazla ışıktadır.
Codegaear, Delphi 7, Lazarus, farklı derleyiciler, sizin tarafınızdan yazılmış makine koduna aktarılacak programlardır, onu zoliki ve birine dönüştürür. Bunlar, programlama dillerini oluşturmayan programlar oluşturma programlarıdır. Bu derlemeler, Nesne Pascal programlama dilini, her zamanki pascal'a benzer sözdizimine benzer olan, ancak fonksiyonel olarak farklı farklıdır.
Programlama dili sözdizimi nedir?
Bu, çeşitli operatörleri yazmak için bir formattır. Örneğin, Pascal'daki "için" döngüsü aşağıdaki formata sahiptir: "n: \u003d 1 için K yapmak", vb.
C ++ programlama dilinde, aynı döngü biraz farklı yazılır: (n \u003d 1; n bir hesap makinesi yazıyoruz
Bu, program kodu olan nesnelerin nasıl etkileşime girdiğini, "değişkenler" olan, matematiksel fonksiyonların nasıl çalıştığını anlamanızı sağlar. Her durumda tüm programlama bir hesaplama olacaktır. Oyun da sürekli bir şeyi gören bir programdır, sayılar ve sayısal fonksiyonlarla çalışır. Programlama matematikten ayrılmaz.
Lazarus geliştirme ortamını yazmak için kullanıyoruz. İşlevselliği, Söyle, KocaGear gibi zengin değildir, ancak ücretsiz erişimdir ve çalışmak için tasarlanmıştır.
Geliştirme ortamını açarak, elemanların şeklini ve panelini görüyoruz. İşte bir form.
İşte eleman paneli.
Yapacağımız ilk şey, iki numaranın ek işlevini uygulamak için ihtiyacınız olan üç maddeyi eklemek. İhtiyacımız var: "Tedit" üç adet ve "Tbutton". Aşağıdaki resimde, oklar panelinde gösterilir. Onlara bir kez, sonra bir kez şekliyle tıklayınız ve üzerinde görünürler.
Bunlar giriş ve normal bir düğme için metin alanlarıdır. Neredeyse herhangi bir Windows programını kullanarak bu öğelerle karşılaşırsınız. Bir göz at.
Şimdi bu yazıtları temizleyin. Görünüm sekmesine tıklayın. Ve "nesnelerin denetçisini" tıklayın. Bu pencere görünecektir.
Formdaki "düğmesi" öğemizde bir kez tıklayın ve Müfettiş penceresindeki "başlık" değerini başka birine değiştirin. Örneğin, "Tamam" kelimesinde. GİRİŞ'i tıklayın. Öğe adı değiştirdiği için formda görüyoruz.
Sadece düzenleme ile yap, sadece yeniden adlandırmayın, ancak onları herhangi bir içerik olmadan yapacağız. Onları sırayla vurgularız ve denetçideki metin değerini temizleriz. Enter tuşuna basmayı unutmayın.
Sonuç olarak, formumuz buna benziyor.
Şimdi hesap makinemiz kazandığımızda, düğmemizin prosedürü için gerekli yazılım kodunu kaydetmeniz gerekir. Düğme öğesine iki kez tıklayın ve kaynak düzenleyiciyi açın.
Görmek? Button1Click Prosedürü. Bu, düğmeyi bir kez tıkladığımızda olanlardan sorumlu olan bir prosedürdür. Ve aşağıdakiler gerçekleşmelidir: programın, ilk iki alanda tanıtılan numaraların toplamını getirmek için üçüncü düzenlemede programa ihtiyaç vardır. Kodu yazıyoruz.
Yazmamız gereken bu kadar basit 5 satır kod. Yorumlar ve açıklamalar yukarıdaki resimde görülebilir. Bundan sonra, bu düğmeye tıklayın.
Projemizin bir derlemesi derlenecek. Programda birleştirilecektir. Sayıları ilk iki alanda giriyoruz, düğmeye tıklayın ve tutarın değerini alabilirsiniz.
Sonuç
"Dosya" düğmesini tıklatabilir, ardından "HER ŞEYİ KAYDETİ" düğmesini tıklatabilirsiniz, kaydetmek için klasörü seçin ve tam teşekküllü bir programa sahip olacaksınız, başlangıcı masaüstünden yapılabilir. Şimdi, bu kodda yeniden yazmanız için kendi başınıza çözmeye çalışın, böylece programın iki numaraya bölünmesi ve katlanmaması gerekir. İpucu: Veri türünü değiştirmeniz gerekir. Aşağıdaki video benzer bir örnek göstermektedir, ancak Delphi 7'de Lazarus değil.
Birçok Delphi programcısı, tasarruf ayarları ile ilişkilidir. INI. Programlarındaki dosyalar. Bu yöntemin kullanımı, daha az ciddi projelerde, programın daha genişlemesini önleyen esnekliğe sınırlarken, önlenmesi gerekir. Böyle bir yaklaşımın kullanım kolaylığı ve geliştirme ortamındaki yerleşik fonların varlığından dolayı oldukça popüler olduğunu söylemeye değer.
Ancak, program ayarlarını saklamak için ideal seçenek yapılandırılmıştır. Xml Dosyalar. Onların avantajları, parametre sayısının sabit olmayacağıdır. Bunu daha iyi anlamak için, belirli bir örneği düşünün.
USEARC programında, Kayıt'a tıkladığınızda, nokta listesini görüntüleyen bir içerik menüsü belirir. Bu öğeler, sırayla ayar dosyasından indirilen komuttur. Ayarların depolandığı durumunda INI. Dosya, program, belirli sayıda komut tasarrufu yapabilir ve yükleyebilir, örneğin 10 veya 50. Daha önemliyse, kodu tekrar yazmanız ve buna göre yeniden derlemeniz gerekir.
Kullanarak bir yaklaşım uygulamak Xml Dosyalar, bölümün tüm parametrelerini dinamik olarak indirme yeteneğine sahip olacağız. Bütün bunlara göre, yapılandırma dosyası, parametrelerin aşırı numaralandırılmadan daha zarif hale gelecektir. Ancak, çalışmak için standart araçlar Xml Delphi'nin birçok dezavantajı var, bu yüzden standart kütüphaneyi kullanmanızı öneririm Msxml.. Genellikle, Windows aile sistemlerinin varsayılan kısmıdır.
Bağlantı için Msxml.COM sunucusundan ithalat yaparak tüm fonksiyonların listesine sahip bir arabirim dosyası oluşturmamız gerekiyor. Arabirimin nasıl içe aktarılması yeterli detaylı makaleler yazılmadı, dosyayı indirmenizi öneririm Msxml2_tlb.pas. Zaten kullanmaya hazır. Dosya indirildikten sonra, projenizin yanına yerleştirin veya Delphi Lib lib klasörüne atın. Böylece, oluşturulan tüm programlar modülü kullanabilecektir. Msxml., MSXML2_TLB'yi kullanımlara eklemek yeterlidir.
Netlik için, bu kütüphanenin uygulanmasının aşağıdaki örneğini göz önünde bulundurun:
Prosedür loaddata; Var xmldoc: domdocument; Kök: ixmldomelement; XMLDOC: \u003d codomdocument.create'e başla; Xmldoc.load ("settins.xml"); Kök: \u003d xmldoc.documentelement; Showmessage ("boyut / genişlik"). Metin); Kök: \u003d nil; Xmldoc: \u003d nil; son;
İlk olarak, DOMDocument sınıfının bir örneği oluşturulur, ardından Settings.xml dosyasının içeriği belleğe yüklenir. Standart'a göre Xml Dosya kök etiketini içermelidir (bu durumda config), sonra işlevi kullanmamız gerekiyor. Belgeselleşme. Sonra içeriğin etiketleri arasındaki içeriği
Burada, dizeyi bir parametre olarak alan SELECTSINGLENDE yöntemi uygulanır.