通过内部文本在xml中查找元素

我试图在内部文本的基础上从文件的根元素搜索xml元素。 我试过这个,但没有工作:

rootElRecDocXml.SelectSingleNode("/ArrayOfRecentFiles[name='"+mFilePath+"']"); 

我知道旧学校的方式逐个遍历所有文件,但我不想这样做。

请注意:我的根元素名称是ArrayOfRecentFiles ,我的子元素名称是RecentFile

我们需要看xml; @Lee在这里提供了正确的方法,所以类似于:

 var el = rootElRecDocXml.SelectSingleNode( "/ArrayOfRecentFiles/RecentFile[text()='"+mFilePath+"']"); 

(将您的编辑/回复记入帐户)

然而! 有很多陷阱:

  • 查询将区分大小写
  • 空格很重要(所以abc abc[newline]等不同 – 同上回车)
  • xml命名空间很重要,所以你可能需要.SelectSingleNode("/alias:ArrayOfRecentFiles[text()='"+mFilePath+"']", nsmgr); ,其中nsmgr是命名空间管理器

为了给出一个与您的评论相符的完整示例:

 XmlDocument rootElRecDocXml = new XmlDocument(); rootElRecDocXml.LoadXml(@" C:\asd\1\Examples\8389.atc C:\asd\1\Examples\8385.atc "); string mFilePath = @"C:\asd\1\Examples\8385.atc"; var el = rootElRecDocXml.SelectSingleNode( "/ArrayOfRecentFiles/RecentFile[text()='" + mFilePath + "']"); 

这里,在SelectSingleNode调用之后el 不为 null 。 它找到了节点。

您需要使用“text()”来检查元素的内部文本,如下所示。

 rootElRecDocXml.SelectSingleNode("/ArrayOfRecentFiles[text()='"+mFilePath+"']");