【问题标题】:XPathNavigator - MoveTo -> XPath ExpressionXPathNavigator - MoveTo -> XPath 表达式
【发布时间】:2012-07-12 09:30:05
【问题描述】:

有人知道如何将 System.Xml.XPath.XPathNavigator(由 XML.XmlDocument.CreateNavigator 创建)的光标移动到 XPath-Expression 定义的位置吗? 我的问题是我必须使用相对路径,但据我所知 XPathNavigator 不提供任何功能

吉百利: 谢谢, 我已经尝试过了,但是 .moveNext() 方法只返回 TRUE 一次,并且导航器光标仍然指向根元素。 (ni.current.InnerXML 返回我的 xml)

我的 xml 简化:

<Ediakt>
<Header>        
</Header>
<MetaData>  
</MetaData>
<Payload>
    <Layer2>    
    </Layer2>           
    <Layer2>    
    </Layer2>
    <Layer2>    
    </Layer2>
</Payload>
</Ediakt>

我的 xPath 表达式是:/Ediakt/Payload/Layer[2]

【问题讨论】:

    标签: .net xml xmldocument


    【解决方案1】:

    您可以通过将节点作为 XpathExpression 传递然后移动来选择节点来实现它

    XPathNodeIterator ni = myNavigator.Select(xPathExpression);
    while (ni.MoveNext())
    {
    ///    .....
    }
    

    【讨论】:

    • @Cadburry 你试过我的解决方案了吗我是的那么请你告诉我错误是什么
    • 是的,我试过了——但如果尝试使用 ni.Current.ReplaceSelf("new xmlstring") 替换节点,则会抛出异常:比如“导航器位置无效”跨度>
    • 你为什么要做 ni.Current.ReplaceSelf("new xmlstring") 因为那不是你的问题
    • 你说得对——不过没关系,位置没变! - 顺便说一句:我在你的帖子中找到了一个解决方案(谢谢) - 我必须先编译 xPath 表达式并将上下文设置为我的命名空间管理器(我不在我的 xml 中使用 ns)。我将在 4 小时内发布完整的灵魂,因为我现在做不到(少于 10 声望;))
    • @Cadburry 我很高兴它为你排序:)
    【解决方案2】:

    感谢 HatSoft 的启发:

    如果我先编译表达式并将上下文设置为我的命名空间管理器 - 那么它就可以工作了!!

    System.Xml.XPath.XPathExpression ex = System.Xml.XPath.XPathExpression.Compile("myexpression");
    ex.SetContext(mynamespacemanager);
    
    
    System.Xml.XPath.XPathNodeIterator ni = nav.Select(ex);
    // ni.Current.ReplaceSelf()
    //ni.m()
    while (ni.MoveNext()) {
    }
    

    【讨论】:

      猜你喜欢
      • 2016-04-12
      • 1970-01-01
      • 2013-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      相关资源
      最近更新 更多