Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 13040|Odpowiedź: 2

[C++] Techniki C++ do zrzutu danych obiektów klasy pochodnych podczas parsowania danych plików XML...

[Skopiuj link]
Opublikowano 16.01.2019 09:22:59 | | | |
Ten post został ostatnio edytowany przez Summer 16.01.2019 o 09:31

1. Jaki jest problem techniczny, który należy rozwiązać w tym artykule?

Rozwiąż problem w dotychczasowym stanie techniki, że podczas parsowania dokumentów XML w języku C++ tagi klas bazowych pochodzące z oryginalnego dokumentu XML mogą parsować tylko dane klasy bazowej według typu klasy bazowej według konwencjonalnej metody parsowania, ale nie mogą całkowicie przetworzyć danych klas pochodnych.


2. Tło techniczne

W dotychczasowych opracowaniach używaj boost::serialization do przenoszenia klas pochodnych ze wskaźnikiem klasy bazowej lub użyj BOOST_CLASS_EXPORT makra.

Oba powyższe schematy w istniejących technologiach opierają się na mechanizmie abstrakcyjnych klas, ale ponieważ klas abstrakcyjnych nie można instancjonować jako konkretnych obiektów, które można wykorzystać, obiekty deklarowane jako klasy bazowe w dokumentach XML nie mogą być parsowane. Niniejszy wynalazek ma na celu zapewnienie, że dane zarówno obiektu klasy bazowej, jak i obiektu klasy pochodnej oznaczonego przez obiekt klasy bazowej mogą być poprawnie analizowane i całkowicie zachowane.


3. Schemat techniczny przedstawiony w tym artykule

Niniejszy artykuł nie wykorzystuje mechanizmu klas abstrakcyjnych, ale wprowadza wskaźnik klasy bazowej do klasy wywoływanej przez klasę bazową, deklaruje funkcję parsowania klasy bazowej jako funkcję wirtualną i wywołuje funkcję parsowania przez wskaźnik klasy bazowej w procesie parsowania, aby zastosować polimorfizm do dynamicznego parsowania i przechowywania danych, a ostatecznie zapewnia, że dane zarówno obiektu klasy bazowej, jak i obiektu klasy pochodnej pochodzącej z klasy bazowej mogą być przechowywane w wskaźniku klasy bazowej zdefiniowanej.
Konkretne kroki:
Krok 1: Kod C++ do zaprojektowania wszystkich klas, które mogą odpowiadać tagom danych w dokumencie XML do parsowania, oraz analizowanie danych XML pojedynczo z tagów najwyższego poziomu.
Krok 2: Dla każdego analizowanego tagu ustal, czy istnieją inne tagi, które dziedziczą ten tag jako klasę bazową, czyli czy typ tagu wywodzi się z innych typów tagów;
Krok 3: Jeśli okaże się, że aktualny tag nie jest dziedziczony jako klasa bazowa, przeanalizuj aktualny tag zgodnie z normalnymi krokami parsowania.
Krok 4: Jeśli ustali, że aktualny tag jest dziedziczony jako klasa bazowa, ustal, czy zawartość opisana przez tag klasy bazowej jest podporządkowana obiektowi klasy bazowej lub obiektowi klasy pochodnej;
Krok 5: Jeśli zawartość aktualnego tagu klasy bazowej jest określana jako opis obiektu klasy bazowej, przeanalizuj aktualny tag zgodnie z normalnymi krokami.
Krok 6: Jeśli obecna zawartość tagu klasy bazowej opisuje obiekt klasy pochodnej, zmodyfikuj kod tak, aby parsował zgodnie z nową metodą parsowania: zmodyfikuj strukturę danych poprzedniego typu definiującego obiekt klasy bazowej i zamiast tego zdefiniuj wskaźnik klasy bazowej; Zmodyfikuj funkcję parsowania klasy bazowej i zadeklaruj ją jako funkcję wirtualną;
Krok 7: Gdy obiekt klasy bazowej był pierwotnie zdefiniowany do parsowania, zamiast tego definiuje się wskaźnik klasy bazowej, a konkretny typ pamięci jest mu przypisywany zgodnie z typem opisanym przez zawartość etykiety, a wskaźnik klasy bazowej służy do wywołania funkcji parsowania w celu analizy aktualnej etykiety.
Krok 8: Parsuj i odgraj aktualny tag, aby sprawdzić, czy wciąż są tagi do parsowania;
Krok 9: Jeśli ustalimy brak tagów do parsowania, oznacza to, że parsowanie zostało zakończone, a dane zapisane do klasy z najwyższą etykietą odpowiadającego dokumentu XML w klasie C++.
Krok 10: Jeśli ustalimy jeszcze nierozwiązane tagi, przeanalizuj następny tag zgodnie z krokiem 2.

Załączony schemat przepływowy

4. Podsumowanie

C++ wprowadza wskaźnik klasy bazowej do przypisywania obiektów odpowiedniego typu do treści tagu XML w zależności od tego, czy jest to klasa bazowa, czy pochodna, i wykorzystuje zdefiniowany wskaźnik klasy bazowej do wywołania funkcji parsowania zadeklarowanej jako funkcja urojona do analizy zawartości tagu klasy bazowej XML. W ten sposób, gdy tag klasy bazowej XML opisuje dane obiektu klasy bazowej, funkcja parsowania klasy bazowej jest dynamicznie wywoływana zgodnie z polimorfizmem C++, a dane klasy bazowej opisane przez tag klasy bazowej mogą być poprawnie parsowane i zachowane. Gdy tag klasy bazowej XML opisuje dane obiektu klasy pochodnej, funkcja parsowania klasy pochodnej będzie wywoływana dynamicznie zgodnie z polimorfizmem C++, a dane klasy opisane przez tag klasy bazowej mogą być również poprawnie parsowane i zachowane.





Poprzedni:Tutorial analizy protokołu QQ na Androida/PC
Następny:Przywołanie duchów demonów w wersji 4.1.8 jest używane w dyskretny sposób
Opublikowano 16.01.2019 09:26:40 |
Schemat blokowy zniknął
 Ziemianin| Opublikowano 16.01.2019 09:31:49 |
Opublikowano 16.01.2019 09:26
Schemat blokowy zniknął

Schemat blokowy dodaje, wiesz
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com