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

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

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

Извиняюсь за навязчивость, но немного продвинулся с прошлого вопроса может теперь будет более понятно чего хочу. В общем есть немного переработанный XML )) уже энный проект )) от писателей подустал.
<?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);
            }
        }
    }
}
ВОПРОС К ЭТОЙ ЧАСТИ КОДА!!! nodeList = root2.SelectNodes("descendant:roduct[Title='Молоко']"); //КАК СДЕЛАТЬ ТАК??? ЧТОБЫ ИСКАТЬ НЕ ЗАДАННЫЙ ЗАРАНЕЕ ПАРАМЕТР. А ВВОДИТЬ С КЛАВИАТУРЫ ИСКОМЫЕ ЗНАЧЕНИЯ // НЕ ИСКАТЬ МОЛОКО А СДЕЛАТЬ ЧТО ТО ТИПА МЕНЮ "Введите название товара которое ищите". //Ввожу название //И он мне выдает результат //Понимаю что это реально но вот как это чудо реализовать не знаю.
Нпшел такое решение
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);
        }
    }
}

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


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

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

12   голосов , оценка 3.917 из 5
Похожие ответы