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); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д