Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 13040|Yanıt: 2

[C++] C++ için XML dosya verilerini ayrıştırırken türetilmiş sınıf nesnesi verilerini dökme teknikleri...

[Bağlantıyı kopyala]
Yayınlandı 16.01.2019 09:22:59 | | | |
Bu gönderi en son Summer tarafından 16-01-2019 09:31 tarihinde düzenlenmiştir

1. Bu makalede çözülmesi gereken teknik sorun nedir?

Önceki teknolojideki sorunu çözelim; C++ dilinde XML belgeleri ayrıştırılırken, temel sınıf etiketleri orijinal XML belgesinde görünen türetilen sınıf verilerini yalnızca temel sınıf tipine göre geleneksel ayrıştırma yöntemine göre ayrıştırabilir, ancak türetilen sınıf verilerini tamamen ayrıştıramaz.


2. Teknik arka plan

Önceki teknikte, türedilen sınıfları bir temel sınıf işaretçisi ile aktarmak için boost::serileştirme kullanın veya BOOST_CLASS_EXPORT makro kullanın.

Mevcut teknolojilerdeki yukarıdaki iki şema soyut sınıf mekanizmasına dayanır, ancak soyut sınıflar kullanılabilecek somut nesne olarak örneklenemediğinden, XML belgelerinde temel sınıf olarak ilan edilen nesneler ayrıştırılamaz. Mevcut icat, hem temel sınıf nesnesinin kendisinin hem de temel sınıf nesnesi tarafından işaretlenen türetilmiş sınıf nesnesinin verilerinin doğru şekilde ayrıştırılabilmesini ve tamamen korunmasını sağlamayı amaçlamaktadır.


3. Bu makalede sunulan teknik şema

Bu makale, soyut sınıf mekanizmasını kullanmaz, ancak temel sınıf işaretçisini temel sınıf tarafından çağrılan sınıfa tanıtır, temel sınıf ayrıştırma fonksiyonunu sanal bir fonksiyon olarak ilan eder ve ayrıştırma işlemindeki temel sınıf işaretçisi aracılığıyla ayrıştırma fonksiyonunu çağırır; böylece polimorfizm uygulanarak veriyi dinamik olarak ayrıştırır ve depolar; nihayetinde hem temel sınıf nesnesinin hem de temel sınıftan türetilen sınıf nesnesinin verilerinin temel sınıf tanımlı işaretçide depolanmasını sağlar.
Özel adımlar:
Adım 1: Çözümlenecek XML belgesindeki veri etiketlerine karşılık gelebilecek tüm sınıfları tasarlamak ve üst düzey etiketlerden XML verilerini teker teker ayrıştırmak için C++ kodu.
Adım 2: Her ayrıştırılan etiket için, etiketi temel sınıf olarak devralan başka etiketler olup olmadığını belirleyin; yani etiket tipi başka etiket türlerinden türetilmiş mu;
Adım 3: Mevcut etiketin temel sınıf olarak miras alınmadığı belirlenirse, mevcut etiketi normal ayrıştırma adımlarına göre ayrıştırın.
Adım 4: Mevcut etiketin bir temel sınıf olarak miras alındığı belirlenirse, temel sınıf etiketiyle tanımlanan içeriğin temel sınıf nesnesine mi yoksa türetilmiş bir sınıf nesnesine mi bağlı olduğunu ayrıca belirleyin;
Adım 5: Mevcut temel sınıf etiketinin içeriği temel sınıf nesnesini tanımlayacak şekilde belirlenirse, mevcut etiketi normal adımlara göre ayrıştırın.
Adım 6: Mevcut temel sınıf etiketi içeriği türetilen sınıf nesnesini tanımlıyorsa, kodu yeni ayrıştırma yöntemine göre ayrıştıracak şekilde değiştirin: temel sınıf nesnesini tanımlayan önceki tipin veri yapısını değiştirin ve bunun yerine temel sınıf işaretçisini tanımlayın; Temel sınıf ayrıştırma fonksiyonunu değiştirin ve bunu sanal bir fonksiyon olarak ilan edin;
Adım 7: Temel sınıf nesnesi ilk olarak ayrıştırma için tanımlanmışken, temel sınıf işaretçisi tanımlanır ve etiket içeriğinde tanımlanan türe göre belirli bellek türü ona tahsis edilir; ana sınıf işaretçisi ise mevcut etiketi ayrıştırmak için ayrıştırma fonksiyonunu çağırmak için kullanılır.
Adım 8: Mevcut etiketi ayrıştırıp oynatarak hala ayrıştırılması gereken etiketler olup olmadığını belirleyin;
Adım 9: Ayrıştırılması gereken etiket olmadığı belirlenirse, bu ayrıştırmanın tamamlandığı ve verilerin C++ sınıfındaki ilgili XML belgesinin en yüksek etiketine sahip sınıfa kaydedildiği anlamına gelir.
Adım 10: Hala çözülmemiş etiketler olduğu belirlenirse, sonraki etiketi adım 2'ye göre ayrıştırın.

Akış şeması eklenmiş

4. Özet

C++, XML etiket içeriğine karşılık gelen türdeki nesneleri temel sınıf mı yoksa türevi sınıf mı olduğuna göre atamak için bir temel sınıf işaretçisi getirir ve tanımlanmış temel sınıf işaretçisini kullanarak XML temel sınıf etiket içeriğini ayrıştırmak için hayali bir fonksiyon olarak ilan edilen bir ayrıştırma fonksiyonunu çağırır. Bu şekilde, XML temel sınıf etiketi temel sınıf nesne verisini tanımladığında, temel sınıf ayrıştırma fonksiyonu C++ polimorfizmasına göre dinamik olarak çağrılır ve temel sınıf etiketiyle tanımlanan temel sınıf verileri doğru şekilde ayrıştırılabilir ve korunabilir. XML temel sınıf etiketi türetilmiş sınıf nesnesi verisini tanımladığında, türetilmiş sınıf ayrıştırma fonksiyonu C++ polimorfizmine göre dinamik olarak çağrılır ve temel sınıf etiketiyle tanımlanan türetilmiş sınıf verileri de doğru şekilde ayrıştırılabilir ve korunabilir.





Önceki:Android/PC için QQ protokol analizi eğitimi
Önümüzdeki:Demon Spirit Summon V4.1.8 ise sakin bir şekilde kullanılır
Yayınlandı 16.01.2019 09:26:40 |
Akış şeması yok
 Ev sahibi| Yayınlandı 16.01.2019 09:31:49 |

Akış şeması ekliyor, biliyorsunuz
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com