C# 为什么XPathNavigator.MoveToAttribute()不工作?
我试图让我的XPathNavigator工作(转到前面的属性名“name”)并附带一段代码,但不知为什么它不想移动。 既不是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
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
,包含所有选定的属性节点——您可以对它们进行迭代。