Я пытаюсь искать xml элемент от корневого элемента файла на основе внутреннего текста. я попробовал это, но не работал:
rootElRecDocXml.SelectSingleNode("/ArrayOfRecentFiles[name='"+mFilePath+"']");
Я знаю старый школьный способ пересечь весь файл поэлементно, но я не хочу делать это.
Обратите внимание на то, что: мое корневое имя элемента ArrayOfRecentFiles
и мое дочернее имя элемента RecentFile
Нам нужно увидеть xml; @Lee дает здесь правильный подход, поэтому что-то вроде:
var el = rootElRecDocXml.SelectSingleNode(
"/ArrayOfRecentFiles/RecentFile[text()='"+mFilePath+"']");
(с учетом вашего редактирования / ответа)
Однако! Есть много ошибок:
abc
отличается от abc [новая строка]
и т. д. - то же самое - возврат каретки) .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
. Он находит узел.
Вам нужно использовать "text()" для проверки внутреннего текста элемента, как показано ниже.
rootElRecDocXml.SelectSingleNode("/ArrayOfRecentFiles[text()='"+mFilePath+"']");