首页 文章

使用C#,XPath进行XML解析

提问于
浏览
4

我的是关于XML解析实践的一般问题 .

假设我们有一个XML文档,我们使用XPath从该文档中获取一些节点:

XMLNode node1=XMLDoc.SelectSingleNode("/SomeNode/SomeOtherNode");

现在n包含SomeOtherNode的数据 . 直观地说,我希望以下代码行:

XMLNode node2=XMLDoc.SelectSingleNode("/Child");

使用名为“Child”的node1的子节点填充node2 . 但遗憾的是,它并没有这样的方式 . XPath搜索从文档的根开始,而不是从调用它的XMLNode对象开始 . 有没有办法让它以“直观”的方式工作?这对于递归或面向对象的解析方法来说是方便的 .

我尝试过使用XMLPathNavigator对象,但它的工作方式相同 . 似乎我可以将XMLDocumentFragment的内部文本设置为给定节点的内部文本,但这似乎是一种低效的数据重复 .

有任何想法吗?

3 回答

  • 0
    XMLNode node2 = XMLDoc.SelectSingleNode("/Child");
    

    这将从根(/)中选择名为'Child'的元素 . 请注意,您正在对XMLDoc应用调用,而不是在node1上应用调用,因此它将相对于文档的根目录 . 我想你想要的是:

    XMLNode node2 = node1.SelectSingleNode("Child"); // edit: removed slash
    

    哪个是相对于先前选择的节点的XPath,而不是文档根 .

    或者,您可以这样做:

    XMLNode node = XMLDoc.SelectSingleNode("/SomeNode/SomeOtherNode/Child")
    

    这将直接选择子节点 .

  • 0

    我相信它应该是:

    XMLNode node2=XMLDoc.SelectSingleNode(".//Child");
    

    (注意点) .

  • 8

    使用//代替/将匹配具有给定名称的所有节点 .

    /从根节点中选择

    //从当前节点中选择与选择匹配的文档中的节点,无论它们在何处

相关问题