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);
}
}
}