Xml C# поиск значения не по узлу а по значению с клавиатуры
Формулировка задачи:
Извиняюсь за навязчивость, но немного продвинулся с прошлого вопроса может теперь будет более понятно чего хочу.
В общем есть немного переработанный XML )) уже энный проект )) от писателей подустал.
И есть реализация
ВОПРОС К ЭТОЙ ЧАСТИ КОДА!!!
nodeList = root2.SelectNodes("descendant:roduct[Title='Молоко']");
//КАК СДЕЛАТЬ ТАК??? ЧТОБЫ ИСКАТЬ НЕ ЗАДАННЫЙ ЗАРАНЕЕ ПАРАМЕТР. А ВВОДИТЬ С КЛАВИАТУРЫ ИСКОМЫЕ ЗНАЧЕНИЯ
// НЕ ИСКАТЬ МОЛОКО А СДЕЛАТЬ ЧТО ТО ТИПА МЕНЮ "Введите название товара которое ищите".
//Ввожу название
//И он мне выдает результат
//Понимаю что это реально но вот как это чудо реализовать не знаю.
Но что делать если нужно найти не полное совпадение а к примеру последовательность букв???
Листинг программы
- <?xml version="1.0" encoding="utf-8" ?>
- <shop>
- <product>
- <Title>Масло</Title>
- <Author>Жюль Верн</Author>
- <Price>311,20</Price>
- <Year>1955</Year>
- <Publisher>Молодая гвардия</Publisher>
- <Info pages="680"></Info>
- </product>
- <product>
- <Title>Молоко</Title>
- <Author>Домашнее</Author>
- <Price>8,50</Price>
- <Year>2015</Year>
- <Publisher>Животновод Комплекс "Весеоре"</Publisher>
- <Info pages="1200"></Info>
- </product>
- <product>
- <Title>Хлеб</Title>
- <Author>Роджер Желязны</Author>
- <Price>490,20</Price>
- <Year>2000</Year>
- <Publisher>Эксмо</Publisher>
- <Info pages="487"></Info>
- </product>
- <product>
- <Title>Сыр</Title>
- <Author>Астрид Линдгрен</Author>
- <Price>330,30</Price>
- <Year>1980</Year>
- <Publisher>Радуга</Publisher>
- <Info pages="354"></Info>
- </product>
- <product>
- <Title>Сметана</Title>
- <Author>Джоан Роулинг</Author>
- <Price>610,50</Price>
- <Year>2005</Year>
- <Publisher>Росмэн</Publisher>
- <Info pages="1080"></Info>
- </product>
- <product>
- <Title>Колбаса</Title>
- <Author>Александр Беляев</Author>
- <Price>711,60</Price>
- <Year>1938</Year>
- <Publisher>Сов. писатель</Publisher>
- <Info pages="389"></Info>
- </product>
- <product>
- <Title>Шоколад</Title>
- <Author>Пауло Коэльо</Author>
- <Price>210,50</Price>
- <Year>2012</Year>
- <Publisher>Эксмо</Publisher>
- <Info pages="230"></Info>
- </product>
- <product>
- <Title>Пиво</Title>
- <Author>Пауло Коэльо</Author>
- <Price>208,40</Price>
- <Year>2010</Year>
- <Publisher>Эксмо</Publisher>
- <Info pages="280"></Info>
- </product>
- <product>
- <Title>Яблоки</Title>
- <Author>Николай Носов</Author>
- <Price>150,50</Price>
- <Year>2001</Year>
- <Publisher>Радуга</Publisher>
- <Info pages="355"></Info>
- </product>
- <product>
- <Title>Гречка</Title>
- <Author>Кир Булычев</Author>
- <Price>155,50</Price>
- <Year>1985</Year>
- <Publisher>Радуга</Publisher>
- <Info pages="478"></Info>
- </product>
- </shop>
Листинг программы
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Xml;
- namespace xml_shop_2
- {
- class Program
- {
- static void Main(string[] args)
- {
- XmlDocument document = new XmlDocument();
- document.Load("minishop.xml");
- //в этом блоке ищем совпадение в названии
- XmlNodeList nodeList;
- XmlNode root2 = document.DocumentElement;
- nodeList = root2.SelectNodes("descendant::product[Title='Молоко']");
- //КАК СДЕЛАТЬ ТАК??? ЧТОБЫ ИСКАТЬ НЕ ЗАДАННЫЙ ЗАРАНЕЕ ПАРАМЕТР. А ВВОДИТЬ С КЛАВИАТУРЫ ИСКОМЫЕ ЗНАЧЕНИЯ
- // НЕ ИСКАТЬ МОЛОКО А СДЕЛАТЬ ЧТО ТО ТИПА МЕНЮ "Введите название товара которое ищите".
- //Ввожу название
- //И он мне выдает результат
- //Понимаю что это реально но вот как это чудо реализовать не знаю.
- for (int i = 0; i < nodeList.Count; i++)
- {
- Console.WriteLine(nodeList[i].InnerText);
- }
- Console.WriteLine("************************************************");
- //в этом блоке ищем совпадение в узле
- XmlElement root = document.DocumentElement;
- XmlNodeList elemList = root.GetElementsByTagName("Title");
- for (int i = 0; i < elemList.Count; i++)
- {
- // Display all book titles in the Node List.
- Console.WriteLine(elemList[i].InnerXml);
- }
- }
- }
- }
Нпшел такое решение
Листинг программы
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Xml;
- namespace xml_shop_2
- {
- class Program
- {
- static void Main(string[] args)
- {
- XmlDocument document = new XmlDocument();
- document.Load("minishop.xml");
- string serch, serch2;
- Console.WriteLine("Введите продукт который ищите");
- serch = Console.ReadLine();
- serch2 = "descendant::product[Title ='" + serch + "']";
- //в этом блоке ищим совпадение в названии
- XmlNodeList nodeList;
- XmlNode root2 = document.DocumentElement;
- nodeList = root2.SelectNodes(serch2);
- if (nodeList.Count != 0)
- {
- for (int i = 0; i < nodeList.Count; i++)
- {
- Console.WriteLine(nodeList[i].InnerText);
- }
- }
- else
- {
- Console.WriteLine("данный товар не найден");
- }
- Console.WriteLine("******************************");
- Console.WriteLine("Список всех товаров в магазине");
- //в этом блоке ищем совпадение в узле
- XmlElement root = document.DocumentElement;
- XmlNodeList elemList = root.GetElementsByTagName("Title");
- for (int i = 0; i < elemList.Count; i++)
- {
- Console.WriteLine(elemList[i].InnerXml);
- }
- }
- }
- }
Решение задачи: «Xml C# поиск значения не по узлу а по значению с клавиатуры»
textual
Листинг программы
- using System;
- using System.Xml.Linq;
- class Program
- {
- static void Main(string[] args)
- {
- var doc = XDocument.Load("minishop.xml");
- string text = "моло";
- foreach (var element in doc.Descendants("Title"))
- {
- if (element.Value.IndexOf(text, StringComparison.OrdinalIgnoreCase) >= 0)
- Console.WriteLine(element);
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д