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

时间:2010-07-12 08:44:25

标签: c# .net xml

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

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

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

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

2 个答案:

答案 0 :(得分:6)

我们需要看xml; @Lee在这里给出了正确的方法,例如:

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

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

然而!有很多陷阱:

  • 查询将区分大小写
  • white-space将是重要的(因此<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 + "']");

此处el调用后,null SelectSingleNode。它找到了节点。

答案 1 :(得分:3)

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

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