Почему XPathNavigator.MoveToAttribute () не работает? - PullRequest
1 голос
/ 04 декабря 2011

Я пытаюсь заставить мой XPathNavigator работать (чтобы перейти к предыдущему имени атрибута "NAME") с прикрепленным фрагментом кода, но почему-то он не хочет перемещаться.Ни thisNavigator.MoveToFirstAttribute(), ни thisNavigator.MoveToAttribute("NAME", ""); не работает ...

Мое содержимое XML выглядит примерно так или иначе

<PARAM NAME="Debug" HINT="Debug" TYPE="Int" VALUE="1" LEVEL="3"/>

Мой код:

 switch (thisNavigator.Name)
 {
        case "VALUE":
        {
            thisNavigator.MoveToFirstAttribute();
            thisNavigator.MoveToAttribute("NAME", "");
        }

РЕДАКТИРОВАТЬ Просто чтобы убедиться, что я только что проверил:

string x = thisNavigator.NamespaceURI;

и это действительно пусто, так что теперь я еще больше запутался.

РЕДАКТИРОВАТЬ2 ХорошоЯ решил это, но довольно далеко.Я должен вернуться к родителю, затем к этому потомку, а затем к атрибуту с заданным именем.Если кто-то знает, почему он не хочет переходить к данному атрибуту «назад», я был бы благодарен за ответ.Вот мой код:

    thisNavigator.MoveToParent();
    thisNavigator.MoveToFirstChild();
    thisNavigator.MoveToAttribute("NAME", "" );

1 Ответ

1 голос
/ 05 декабря 2011

Хорошо, я решил это, но довольно далеко.Я должен вернуться к родителю, затем к этому потомку, а затем к атрибуту с заданным именем

Предоставленный код:

       thisNavigator.MoveToAttribute("NAME", "" );   

означает: если thisNavigator представляетэлемент, имеющий атрибут с именем "NAME", «move-to» для этого атрибута.

Наиболее вероятная причина, по которой это не удается, состоит в том, что thisNavigator вообще не представляет элемент или представляет элементэлемент, который не имеет атрибута с именем "NAME".

Следующая выдержка из документации MSDN может быть полезна :


Примечания


Если XPathNavigator в данный момент не позиционируется на элементе, этот метод возвращает значение false.

После успешного вызова свойств MoveToAttribute свойства LocalName, NamespaceURI и Prefix отражают значенияатрибута.Когда XPathNavigator располагается на атрибуте, методы MoveToNext, MoveToPrevious и MoveToFirst не применяются.Эти методы всегда возвращают false и не меняют положение навигатора.Скорее, вы можете вызвать MoveToNextAttribute для перехода к следующему узлу атрибута.

После размещения на атрибуте вы можете вызвать MoveToParent для перехода к элементу владельца.

...