Я портирую код, использующий XmlDocument. XmlNode имеет свойства FirstChild и NextSibling. Есть ли способ синтаксического анализа с использованием XmlReader до первого дочернего элемента или следующего брата, если xmlreader проанализировал произвольный элемент в xml?
XmlReader: есть ли способ найти первого ребенка и следующего брата?
Ответы (2)
С XmlRreader вы работаете по другой схеме. Вы всегда находитесь на каком-то текущем узле и переключаетесь на следующий. Для текущего узла вы можете спросить IsEmptyElement (который говорит, имеет ли тег форму <something attr=value/>. Если элемент пуст, очевидно, у вас нет дочерних элементов.
Рассмотрим случай, когда IsEmptyElement ложно, теперь у вас есть что-то вроде <something> <maybechild/> </something>. Вы можете сказать ReadStartElement, что переведет вас на следующую позицию. Для следующей позиции вы проверяете IsStartElement. Если это правда, у вас есть ребенок, и вы этим занимаетесь. В противном случае вы находитесь в </something> и детей нет.
Еще немного документации: http://msdn.microsoft.com/en-us/library/t9bfea29.aspx.
IsEmptyElement истинно), после перехода к следующему элементу у вас будет либо IsStartElement == true (тогда у вас есть брат), либо false (тогда у вас есть конец родительского элемента). Если элемент не пустой, вы читаете дочерние элементы и закрывающий тег, переходите к следующему и обрабатываете таким же образом.
- person Vlad; 12.11.2011
Создайте XPathDocument и создайте XPathNavigator, используя CreateNavigator. У него есть методы (как следует из названия) для навигации по XML. Эквивалентные методы - MoveToFirstChild и MoveToNext.