Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 13040|Отговор: 2

[C++] Техники за C++ за изхвърляне на производни класови обектни данни при парсване на XML файлове...

[Копирай линк]
Публикувано в 16.01.2019 г. 9:22:59 ч. | | | |
Този пост беше последно редактиран от Summer на 16.01.2019 09:31

1. Какъв е техническият проблем, който трябва да се реши в тази статия?

Решете проблема в предходното изкуство, че при парсиране на XML документи на език C++, базовите класови тагове, които се появяват в оригиналния XML документ, могат да парсират базовите класови данни само според базовия тип клас според конвенционалния метод, но не могат напълно да парсират производните класови данни.


2. Технически фон

В предходно изкуство използвайте boost::serialization за прехвърляне на производни класове с базов класов указател или използвайте BOOST_CLASS_EXPORT макрос.

И двете горни схеми в съществуващите технологии се базират на механизма на абстрактния клас, но тъй като абстрактните класове не могат да бъдат инстанцирани като конкретни обекти, които могат да се използват, обектите, декларирани като базови класове в XML документи, не могат да бъдат анализирани. Настоящото изобретение има за цел да гарантира, че данните както на базовия класов обект, така и на производния класов обект, маркиран от обекта на базовия клас, могат да бъдат правилно анализирани и напълно запазени.


3. Техническата схема, предоставена в тази статия

Тази статия не използва механизъм на абстрактния клас, а въвежда указателя на базовия клас в класа, извикан от базовия клас, обявява функцията за парсиране на базовия клас като виртуална функция и извиква функцията за парсиране чрез указателя на базовия клас в процеса на парсиране, така че да приложи полиморфизъм за динамично парсиране и съхранение на данните, и накрая гарантира, че данните както на обекта на базовия клас, така и на производния класов обект, извлечен от базовия клас, могат да се съхраняват в указателя, дефиниран от базовия клас.
Конкретни стъпки:
Стъпка 1: Кодиране на C++ за проектиране на всички класове, които могат да съответстват на таговете на данните в XML документа, който се анализира, и парсиране на XML данни един по един от най-горните тагове.
Стъпка 2: За всеки парсиран таг се определи дали има други тагове, които наследяват таго като базов клас, тоест дали типът таг извежда други типове тагове;
Стъпка 3: Ако се установи, че текущият таг не се наследява като базов клас, парсиране на текущия таг според нормалните стъпки за парсиране.
Стъпка 4: Ако се определи, че текущият таг се наследява като базов клас, допълнително се определи дали съдържанието, описано от базовия клас таг, е подчинено на базовия класов обект или производен класов обект;
Стъпка 5: Ако съдържанието на текущия базов клас таг е определено да опише обекта на базовия клас, парсиране на текущия таг според нормалните стъпки.
Стъпка 6: Ако текущото съдържание на базовия клас таг описва производния класов обект, модифицирайте кода да парсира според новия метод за парсиране: променете структурата от данни на предишния тип, който дефинира базовия класов обект, и дефинирайте базовия класов указател; Модифицирайте функцията за парсване на базовия клас и я обявете за виртуална функция;
Стъпка 7: Когато обектът базов клас първоначално е бил дефиниран за парсинг, вместо това се дефинира базовият класов указател и конкретният тип памет се заделя към него според типа, описан от съдържанието на етикета, а базовият класов указател се използва за извикване на функцията за парсиране на текущия етикет.
Стъпка 8: Парсирайте и пуснете текущия таг, за да определите дали все още има тагове, които трябва да бъдат анализирани;
Стъпка 9: Ако се установи, че няма тагове за парсиране, това означава, че парсингът е завършен и данните са запазени в класа с най-висок етикет на съответния XML документ в класа C++.
Стъпка 10: Ако се установи, че все още има тагове, които не са разрешени, парсиране на следващия таг според стъпка 2.

Прикрепена е блок-схема

4. Резюме

C++ въвежда базов класов указател, който присвоява обекти от съответния тип на съдържанието на XML таговете според това дали е базов клас или производен клас, и използва дефинирания базов клас указател, за да извика функция за парсиране, обявена като въображаема функция, за да анализира съдържанието на XML базовия клас таг. По този начин, когато XML базовият клас таг описва базовите данни от обекта на класа, функцията за парсиране на базовия клас ще бъде динамично извикната според полиморфизма на C++, а базовите класови данни, описани от базовия клас таг, могат да бъдат правилно анализирани и запазени. Когато XML базовият клас таг описва производните данни за обекта на класа, производната функция за разбор на клас ще бъде динамично извиквана според полиморфизма на C++, а производните класови данни, описани от базовия класов таг, също могат да бъдат правилно анализирани и запазени.





Предишен:Урок за анализ на протокола QQ за Android/PC
Следващ:Demon Spirit Summon V4.1.8 се използва по-спокойно
Публикувано в 16.01.2019 г. 9:26:40 ч. |
Блок-схемата я няма
 Хазяин| Публикувано в 16.01.2019 г. 9:31:49 ч. |
Публикувано на 2019-1-16 09:26
Блок-схемата я няма

Диаграмата на потока добавя, знаете ли
Отричане:
Целият софтуер, програмни материали или статии, публикувани от Code Farmer Network, са само за учебни и изследователски цели; Горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай потребителите ще понесат всички последствия. Информацията на този сайт идва от интернет, а споровете за авторски права нямат нищо общо с този сайт. Трябва напълно да изтриете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето. Ако ви харесва програмата, моля, подкрепете оригинален софтуер, купете регистрация и получете по-добри услуги. Ако има нарушение, моля, свържете се с нас по имейл.

Mail To:help@itsvse.com