通过内部文本在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+"']");