C# 为什么XPathNavigator.MoveToAttribute()不工作?

C# 为什么XPathNavigator.MoveToAttribute()不工作?,c#,xml,xpath,xpathnavigator,C#,Xml,Xpath,Xpathnavigator,我试图让我的XPathNavigator工作(转到前面的属性名“name”)并附带一段代码,但不知为什么它不想移动。 既不是thisNavigator.MoveToFirstAttribute()也不是thisNavigator.MoveToAttribute(“名称”,“名称”)工作 我的xml内容大致如下 <PARAM NAME="Debug" HINT="Debug" TYPE="Int" VALUE="1" LEVEL="3"/> 编辑 为了确保我刚才检查过: string

我试图让我的XPathNavigator工作(转到前面的属性名“name”)并附带一段代码,但不知为什么它不想移动。 既不是
thisNavigator.MoveToFirstAttribute()
也不是
thisNavigator.MoveToAttribute(“名称”,“名称”)工作

我的xml内容大致如下

<PARAM NAME="Debug" HINT="Debug" TYPE="Int" VALUE="1" LEVEL="3"/>
编辑 为了确保我刚才检查过:

string x = thisNavigator.NamespaceURI;
它确实是空的,所以现在我更困惑了

EDIT2 好的,我已经解决了这个问题,但是还有很长的路要走。我必须返回到父级,然后返回到这个子级,然后返回到具有给定名称的属性。若有人知道为什么它不想返回到给定的属性“向后”,我将不胜感激。这是我的密码:

    thisNavigator.MoveToParent();
    thisNavigator.MoveToFirstChild();
    thisNavigator.MoveToAttribute("NAME", "" );
好的,我已经解决了这个问题,但是还有很长的路要走。我得回去了 到父级,然后返回到此子级,然后返回到具有 姓名

提供的代码:

       thisNavigator.MoveToAttribute("NAME", "" );   
意思是:如果
thisNavigator
表示具有名为
“NAME”
的属性的元素,则“移动到”该属性

此操作不成功的最可能原因是
thisNavigator
根本不表示元素,或者表示没有名为
“NAME”
的属性的元素

以下摘录可能会有所帮助


评论


如果XPathNavigator当前未定位在元素上,则此方法返回false

成功调用MoveToAttribute后,LocalName、NamespaceURI和Prefix属性将反映该属性的值。当XPathNavigator位于属性上时,MoveToNext、MoveToPrevious和MoveToFirst方法不适用。这些方法总是返回false,并且不会更改导航器的位置。相反,您可以调用MoveToNextAttribute来移动到下一个属性节点

在属性上定位后,可以调用MoveToParent以移动到所有者元素

好的,我已经解决了这个问题,但是还有很长的路要走。我得回去了 到父级,然后返回到此子级,然后返回到具有 姓名

提供的代码:

       thisNavigator.MoveToAttribute("NAME", "" );   
意思是:如果
thisNavigator
表示具有名为
“NAME”
的属性的元素,则“移动到”该属性

此操作不成功的最可能原因是
thisNavigator
根本不表示元素,或者表示没有名为
“NAME”
的属性的元素

以下摘录可能会有所帮助


评论


如果XPathNavigator当前未定位在元素上,则此方法返回false

成功调用MoveToAttribute后,LocalName、NamespaceURI和Prefix属性将反映该属性的值。当XPathNavigator位于属性上时,MoveToNext、MoveToPrevious和MoveToFirst方法不适用。这些方法总是返回false,并且不会更改导航器的位置。相反,您可以调用MoveToNextAttribute来移动到下一个属性节点


在属性上定位后,可以调用MoveToParent移动到所有者元素。

非常感谢。我没有意识到这一点。但是,还有其他解决方案可以在属性之间导航吗?如果fr实例导航器位于某个属性上,并且我想转到另一个(以前的)属性(即“名称”)。我怎样才能做到这一点?@Patryk:最好的处理方法是使用XSLT和XPath。正如你自己发现的那样,任何其他方式(不必要地)都会更加困难和痛苦。因此,在您的例子中,如果您想从该元素的父级获取
someElement
的所有属性,只需计算(
SelectNodes()
)这个XPath表达式:
someElement/@*
,结果是一个
XmlNodeList
,包含所有选定的属性节点——您可以对它们进行迭代。非常感谢。我没有意识到这一点。但是,还有其他解决方案可以在属性之间导航吗?如果fr实例导航器位于某个属性上,并且我想转到另一个(以前的)属性(即“名称”)。我怎样才能做到这一点?@Patryk:最好的处理方法是使用XSLT和XPath。正如你自己发现的那样,任何其他方式(不必要地)都会更加困难和痛苦。因此,在您的例子中,如果您想从该元素的父元素获取
someElement
的所有属性,只需计算(
SelectNodes()
)这个XPath表达式:
someElement/@*
,结果是一个
XmlNodeList
,包含所有选定的属性节点——您可以对它们进行迭代。