2010-07-12 64 views
5

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

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

我知道老学校的方式来遍历所有文件元素的元素,但我不想这样做。

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

回答

5

我们需要看到xml; @Lee这里给出正确的方法,所以像:

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

(把你的编辑/回复考虑)

但是!有很多陷阱的:

  • 查询将是区分大小写的
  • 空白会显著(所以<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 + "']"); 

这里,elnullSelectSingleNode调用之后。它找到节点。

+0

是我的XML – PUG 2010-07-12 09:05:07

+0

这是我的XML: C:\ ASD \ 1个\实例\ 8389.atc C:\ ASD \ 1个\实例\ 8385.atc \t PUG 2010-07-12 09:11:32

+0

@jaminator - 请参阅更新 – 2010-07-12 09:33:37

3

你需要使用“文本()”,以核对如下元素的内部文本。

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

它返回null – PUG 2010-07-12 08:54:28

+0

试试这个然后没有意识到你有一个额外的子节点级别rootElRecDocXml.SelectSingleNode(“/ ArrayOfRecentFiles/RecentFile [文本()='”+ mFilePath +“']”);上述 – 2010-07-12 09:05:48