Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > поиск по xml файлу и вывод данных в textbox


Автор: kama3uk 30.7.2012, 13:43
есть вот такой XML файлик
Код

<NewDataSet>
  <Table>
    <LCH>2</LCH>
    <CITY>Симферополь</CITY>
    <STREET>Хабаровская</STREET>
    <DOM>4</DOM>
  </Table>
<Table>
    <LCH>3</LCH>
    <CITY>Симферополь</CITY>
    <STREET>Хабаровская</STREET>
    <DOM>10</DOM>
  </Table>
</NewDataSet>


требуется сделать следующее: Пользователь вводит в текст-бокс номер ("LCH") после чего программка ищет данный номер и как только нашла выводит в три текст-бокса дальнейшую инфу(CITY,STREET,DOM).

вот код программки: 
Код

private void ReadXMLDocument()
        {
            string city, street, dom;  //теги в базе

            string filepath = "C:\\Sprav\\Baza.xml";   
         
            XmlDocument xd = new XmlDocument();
            FileStream fs = new FileStream(filepath, FileMode.Open);
            xd.Load(fs);
            XmlNodeList list = xd.GetElementsByTagName("Table");

            for (int i = 0; i < list.Count; i++)
            {
                XmlElement id = (XmlElement)xd.GetElementsByTagName("LCH")[i]; 
                XmlElement gor = (XmlElement)xd.GetElementsByTagName("CITY")[i]; 
                XmlElement ylica = (XmlElement)xd.GetElementsByTagName("STREET")[i]; 
                XmlElement Ndom = (XmlElement)xd.GetElementsByTagName("DOM")[i];

                string pid = textBox13.Text;    // Сюда вводится номер "LCH"     
                  
                if (id.GetAttribute("LCH") == pid)  //Если наткнулся на нужный тег
                {
                    //Вставляем переменные текст из тегов
                    city = gor.InnerText;
                    street = ylica.InnerText;
                    dom = Ndom.InnerText;

                    //заполняем поля на форме
                    textBox14.Text = city;
                    textBox2.Text = street;
                    textBox3.Text = dom;

                    break;
                }
                else
                {
                
                }
            }
            fs.Close();   
        }


Но он не работает.Проскакивает мимо 
Код

if (id.GetAttribute("LCH") == pid)  //Если наткнулся на нужный тег


Помогите разобратся!.

Автор: Fortnox 30.7.2012, 16:29
Проскакивает, потому что LCH не атрибут, а элемент. И нужно брать свойство InnerText
И лучше использовать XPath для выборки:
Код

var node = xd.SelectSingleNode("//Table[LCH = '2']"); // 2 - номер для поиска

            string city = node["CITY"].InnerText;
            string street = node["STREET"].InnerText;
            string dom = node["DOM"].InnerText;


Или модифицируйте ваш код, просто замените строчку 21 на:
Код

if (id.Name == "LCH" && id.InnerText == pid)

Автор: kama3uk 31.7.2012, 08:38
модифицируя строчку 
Код
 if (id.Name == "LCH" && id.InnerText == pid) 
 помогло.Спасибки за помощь!

Автор: IBS 9.8.2012, 11:20
Я все-таки хочу порекомендовать использовать XElement XDocument вместо XmlElement XmlDocument - они устарели
Преимущества  XElement XDocument:
1) Простота построения XML-документа
2) Linq - синтаксис

Автор: kama3uk 9.8.2012, 13:29
ну при построении так то да. А вот при поиске лучше использовать xpath. Он вроде как то быстрее соображает.Потомучто я эту прогу сделал но она очень медленно работает.XML файл вмещает в себя 159 тысяч строк.Щас вот пытаюсь с Xpath'ом разобратся

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)