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

PUG*_*PUG 5 .net c# xml

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

rootElRecDocXml.SelectSingleNode("/ArrayOfRecentFiles[name='"+mFilePath+"']");
Run Code Online (Sandbox Code Playgroud)

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

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

Mar*_*ell 6

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

var el = rootElRecDocXml.SelectSingleNode(
          "/ArrayOfRecentFiles/RecentFile[text()='"+mFilePath+"']");
Run Code Online (Sandbox Code Playgroud)

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

然而!有很多陷阱:

  • 查询将区分大小写
  • 白色空间将是重要的(因此<foo>abc</foo>是不同的<foo> abc[newline]</foo>等 - 同样回车)
  • xml命名空间很重要,因此您可能需要.SelectSingleNode("/alias:ArrayOfRecentFiles[text()='"+mFilePath+"']", nsmgr);,nsmgr命名空间管理器在哪里

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

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

这里,el不是 nullSelectSingleNode调用.它找到了节点.