Xml C# поиск значения не по узлу а по значению с клавиатуры

Узнай цену своей работы

Формулировка задачи:

Извиняюсь за навязчивость, но немного продвинулся с прошлого вопроса может теперь будет более понятно чего хочу. В общем есть немного переработанный XML )) уже энный проект )) от писателей подустал.
Листинг программы
  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <shop>
  3. <product>
  4. <Title>Масло</Title>
  5. <Author>Жюль Верн</Author>
  6. <Price>311,20</Price>
  7. <Year>1955</Year>
  8. <Publisher>Молодая гвардия</Publisher>
  9. <Info pages="680"></Info>
  10. </product>
  11. <product>
  12. <Title>Молоко</Title>
  13. <Author>Домашнее</Author>
  14. <Price>8,50</Price>
  15. <Year>2015</Year>
  16. <Publisher>Животновод Комплекс "Весеоре"</Publisher>
  17. <Info pages="1200"></Info>
  18. </product>
  19. <product>
  20. <Title>Хлеб</Title>
  21. <Author>Роджер Желязны</Author>
  22. <Price>490,20</Price>
  23. <Year>2000</Year>
  24. <Publisher>Эксмо</Publisher>
  25. <Info pages="487"></Info>
  26. </product>
  27. <product>
  28. <Title>Сыр</Title>
  29. <Author>Астрид Линдгрен</Author>
  30. <Price>330,30</Price>
  31. <Year>1980</Year>
  32. <Publisher>Радуга</Publisher>
  33. <Info pages="354"></Info>
  34. </product>
  35. <product>
  36. <Title>Сметана</Title>
  37. <Author>Джоан Роулинг</Author>
  38. <Price>610,50</Price>
  39. <Year>2005</Year>
  40. <Publisher>Росмэн</Publisher>
  41. <Info pages="1080"></Info>
  42. </product>
  43. <product>
  44. <Title>Колбаса</Title>
  45. <Author>Александр Беляев</Author>
  46. <Price>711,60</Price>
  47. <Year>1938</Year>
  48. <Publisher>Сов. писатель</Publisher>
  49. <Info pages="389"></Info>
  50. </product>
  51. <product>
  52. <Title>Шоколад</Title>
  53. <Author>Пауло Коэльо</Author>
  54. <Price>210,50</Price>
  55. <Year>2012</Year>
  56. <Publisher>Эксмо</Publisher>
  57. <Info pages="230"></Info>
  58. </product>
  59. <product>
  60. <Title>Пиво</Title>
  61. <Author>Пауло Коэльо</Author>
  62. <Price>208,40</Price>
  63. <Year>2010</Year>
  64. <Publisher>Эксмо</Publisher>
  65. <Info pages="280"></Info>
  66. </product>
  67. <product>
  68. <Title>Яблоки</Title>
  69. <Author>Николай Носов</Author>
  70. <Price>150,50</Price>
  71. <Year>2001</Year>
  72. <Publisher>Радуга</Publisher>
  73. <Info pages="355"></Info>
  74. </product>
  75. <product>
  76. <Title>Гречка</Title>
  77. <Author>Кир Булычев</Author>
  78. <Price>155,50</Price>
  79. <Year>1985</Year>
  80. <Publisher>Радуга</Publisher>
  81. <Info pages="478"></Info>
  82. </product>
  83. </shop>
И есть реализация
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Xml;
  7. namespace xml_shop_2
  8. {
  9. class Program
  10. {
  11. static void Main(string[] args)
  12. {
  13. XmlDocument document = new XmlDocument();
  14. document.Load("minishop.xml");
  15. //в этом блоке ищем совпадение в названии
  16. XmlNodeList nodeList;
  17. XmlNode root2 = document.DocumentElement;
  18. nodeList = root2.SelectNodes("descendant::product[Title='Молоко']");
  19. //КАК СДЕЛАТЬ ТАК??? ЧТОБЫ ИСКАТЬ НЕ ЗАДАННЫЙ ЗАРАНЕЕ ПАРАМЕТР. А ВВОДИТЬ С КЛАВИАТУРЫ ИСКОМЫЕ ЗНАЧЕНИЯ
  20. // НЕ ИСКАТЬ МОЛОКО А СДЕЛАТЬ ЧТО ТО ТИПА МЕНЮ "Введите название товара которое ищите".
  21. //Ввожу название
  22. //И он мне выдает результат
  23. //Понимаю что это реально но вот как это чудо реализовать не знаю.
  24. for (int i = 0; i < nodeList.Count; i++)
  25. {
  26. Console.WriteLine(nodeList[i].InnerText);
  27. }
  28. Console.WriteLine("************************************************");
  29. //в этом блоке ищем совпадение в узле
  30. XmlElement root = document.DocumentElement;
  31. XmlNodeList elemList = root.GetElementsByTagName("Title");
  32. for (int i = 0; i < elemList.Count; i++)
  33. {
  34. // Display all book titles in the Node List.
  35. Console.WriteLine(elemList[i].InnerXml);
  36. }
  37. }
  38. }
  39. }
ВОПРОС К ЭТОЙ ЧАСТИ КОДА!!! nodeList = root2.SelectNodes("descendant:roduct[Title='Молоко']"); //КАК СДЕЛАТЬ ТАК??? ЧТОБЫ ИСКАТЬ НЕ ЗАДАННЫЙ ЗАРАНЕЕ ПАРАМЕТР. А ВВОДИТЬ С КЛАВИАТУРЫ ИСКОМЫЕ ЗНАЧЕНИЯ // НЕ ИСКАТЬ МОЛОКО А СДЕЛАТЬ ЧТО ТО ТИПА МЕНЮ "Введите название товара которое ищите". //Ввожу название //И он мне выдает результат //Понимаю что это реально но вот как это чудо реализовать не знаю.
Нпшел такое решение
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Xml;
  7. namespace xml_shop_2
  8. {
  9. class Program
  10. {
  11. static void Main(string[] args)
  12. {
  13. XmlDocument document = new XmlDocument();
  14. document.Load("minishop.xml");
  15. string serch, serch2;
  16. Console.WriteLine("Введите продукт который ищите");
  17. serch = Console.ReadLine();
  18. serch2 = "descendant::product[Title ='" + serch + "']";
  19. //в этом блоке ищим совпадение в названии
  20. XmlNodeList nodeList;
  21. XmlNode root2 = document.DocumentElement;
  22. nodeList = root2.SelectNodes(serch2);
  23. if (nodeList.Count != 0)
  24. {
  25. for (int i = 0; i < nodeList.Count; i++)
  26. {
  27. Console.WriteLine(nodeList[i].InnerText);
  28. }
  29. }
  30. else
  31. {
  32. Console.WriteLine("данный товар не найден");
  33. }
  34. Console.WriteLine("******************************");
  35. Console.WriteLine("Список всех товаров в магазине");
  36. //в этом блоке ищем совпадение в узле
  37. XmlElement root = document.DocumentElement;
  38. XmlNodeList elemList = root.GetElementsByTagName("Title");
  39. for (int i = 0; i < elemList.Count; i++)
  40. {
  41. Console.WriteLine(elemList[i].InnerXml);
  42. }
  43. }
  44. }
  45. }
Но что делать если нужно найти не полное совпадение а к примеру последовательность букв???

Решение задачи: «Xml C# поиск значения не по узлу а по значению с клавиатуры»

textual
Листинг программы
  1. using System;
  2. using System.Xml.Linq;
  3. class Program
  4. {
  5.     static void Main(string[] args)
  6.     {
  7.         var doc = XDocument.Load("minishop.xml");
  8.         string text = "моло";
  9.         foreach (var element in doc.Descendants("Title"))
  10.         {
  11.             if (element.Value.IndexOf(text, StringComparison.OrdinalIgnoreCase) >= 0)
  12.                 Console.WriteLine(element);
  13.         }
  14.     }
  15. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 3.917 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы