Найдите элемент в xml его внутренним текстом

Я пытаюсь искать xml элемент от корневого элемента файла на основе внутреннего текста. я попробовал это, но не работал:

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

Я знаю старый школьный способ пересечь весь файл поэлементно, но я не хочу делать это.

Обратите внимание на то, что: мое корневое имя элемента ArrayOfRecentFiles и мое дочернее имя элемента RecentFile

5
задан PUG 26 November 2012 в 17:36
поделиться

2 ответа

Нам нужно увидеть xml; @Lee дает здесь правильный подход, поэтому что-то вроде:

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

(с учетом вашего редактирования / ответа)

Однако! Есть много ошибок:

  • запрос будет чувствителен к регистру
  • пробел будет значительным (поэтому abc отличается от abc [новая строка] и т. д. - то же самое - возврат каретки)
  • Пространства имен 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 . Он находит узел.

6
ответ дан 14 December 2019 в 01:01
поделиться

Вам нужно использовать "text()" для проверки внутреннего текста элемента, как показано ниже.

rootElRecDocXml.SelectSingleNode("/ArrayOfRecentFiles[text()='"+mFilePath+"']");
3
ответ дан 14 December 2019 в 01:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: