Для моего класса программирования C # начального уровня мы по сути кодируем наш собственный анализатор XML (используя FileStream и ReadByte ())
У нас есть файл "test.xml", который идет ...
(мой учитель использует контейнер взаимозаменяемо с родительским элементом и использует атрибут как дочерний элемент, он немного сбивает с толку тех из нас, кто немного знает xml, но его класс нацелен на тех, кто не знает xml)
<containers>
<container>
<attribute1>data for attribute1 of container1</attribute1>
<attribute2>data for attribute2 of container1</attribute2>
<attribute3>data for attribute3 of container1</attribute3>
</container>
///more containers with varying amounts of attributes
...
</containers>
Теперь в его примере парсера (который мы должны изучить и сделать нашу собственную версию, мы можем использовать его структуру, но он предпочитает, чтобы мы немного ее переключили) он использует константу
const string XMLCONTAINER = "container"
чтобы проверить, находимся ли мы в родительском элементе или мы обрабатываем дочерний элемент контейнера
if(!gInsideContainer) {
if(String.Compare(gParseToken,XMLCONTAINER)==0) {
Console.WriteLine("\n***** BEG OF CONTAINER\n");
gInsideContainer=true;
// save the offset of the beginning of the
// container into the container object
setAttribute("BEGPTR",gTagOffset.ToString());
}
Мне кажется, что это плохой mojo, так как это означает, что я должен редактировать исходный код для каждого типа xml, который мы в конечном итоге обрабатываем, чтобы выяснить, находимся ли мы в родительском элементе или нет. Я пытаюсь подумать, учитывая код, который мы должны изучить, как я могу сделать более общую проверку, чтобы увидеть, нахожусь ли я в родительском элементе или я являюсь дочерним по отношению к родительскому элементу.
Я думаю о создании массива для хранения открывающих элементов или другой строковой переменной для хранения текущего открывающего родительского элемента, затем проверки его закрывающего элемента, но это может не сработать так, как я думаю о его реализации поймать начальный
<containers>
и установите insideContainer в значение true для остальной части синтаксического анализа (у вас логические ошибки, по крайней мере, я могу определить это перед кодированием, хе)
Мне не разрешено использовать какой-либо из классов синтаксического анализа .net XML (поскольку мы в основном переписываем его с меньшими функциональными возможностями и, возможно, с меньшей эффективностью, но это скорее опыт решения проблем и создания алгоритмов, к которым он стремится учить)
Любые предложения о том, как я мог бы реализовать мою идею? (и имейте в виду, программист начального уровня здесь, смеется)
Большое спасибо за любую помощь и совет!