2016-10-20 10 views
0

Я новичок в использовании XML с C#.Получение значений из XML с условиями, заданными с помощью C#

XML КОД:

<LVL2> 
    <Tables> 
    <TBL_ID>1</TBL_ID> 
    <TBL_Name>test1</TBL_Name> 
    <MD_ID>1</MD_ID> 
    <Tables> 
    <Tables> 
    <TBL_ID>2</TBL_ID> 
    <TBL_Name>test2</TBL_Name> 
    <MD_ID>1</MD_ID> 
    </Tables> 
    <Tables> 
    <TBL_ID>3</TBL_ID> 
    <TBL_Name>test3</TBL_Name> 
    <MD_ID>1</MD_ID> 
    </Tables> 
</LVL2> 

<LVL2> 
    <Tables> 
    <TBL_ID>1</TBL_ID> 
    <TBL_Name>test4</TBL_Name> 
    <MD_ID>2</MD_ID> 
    </Tables> 
    <Tables> 
    <TBL_ID>2</TBL_ID> 
    <TBL_Name>test5</TBL_Name> 
    <MD_ID>2</MD_ID> 
    </Tables> 
    <Tables> 
    <TBL_ID>3</TBL_ID> 
    <TBL_Name>test6</TBL_Name> 
    <MD_ID>2</MD_ID> 
    </Tables> 
</LVL2> 

Как вставить в CheckedListBox текстовые значения из tbl_name, который имеет только md_id = 1. Вот мой текущий код.

while (xmlReader.Read()) 
{ 
    switch (xmlReader.NodeType) 
    { 

     case XmlNodeType.Element: 
      elName = xmlReader.Name; 
      break; 
     case XmlNodeType.Text: 

      if (elName == "TBL_Name" && MD_ID == "1") 
      { 
       checkedListBox2.Items.Add(xmlReader.Value); 
      } 

      break;  
    } 
} 

Я не могу показаться, чтобы выяснить, как получить текст, который имеет MD_ID = "1" и вывод:

test4 
test5 
test6 
+1

Вывод, который вы опубликовали в своем вопросе - Это ожидаемый результат или неправильный вывод, который текущий текущий код испускает? – RBT

+0

Ваш XML не отформатирован должным образом. У него нет корневого узла. Пожалуйста, исправьте это. – RBT

+0

они должны отображаться как выходные данные. Также исправлен мой XML. Спасибо –

ответ

1

Прежде всего, XML не отформатирован должным образом. Он должен содержать корневой узел, и вы пропустили закрытие тега <Tables>. В примере, например, если вы хотите, чтобы выбрать имя таблицы элементов, имеющих "MD_ID = 1", то результат будет:

test1
test2
test3

Если вы хотите о/р, как вы упомянули, то условие будет не равен 1. Вот решение:

string xmlInput = @" 
    <root> 
    <LVL2> 
    <Tables> 
    <TBL_ID>1</TBL_ID> 
    <TBL_Name>test1</TBL_Name> 
    <MD_ID>1</MD_ID> 
    </Tables> 
    <Tables> 
    <TBL_ID>2</TBL_ID> 
    <TBL_Name>test2</TBL_Name> 
    <MD_ID>1</MD_ID> 
    </Tables> 
    <Tables> 
    <TBL_ID>3</TBL_ID> 
    <TBL_Name>test3</TBL_Name> 
    <MD_ID>1</MD_ID> 
    </Tables> 
    </LVL2> 
    <LVL2> 
    <Tables> 
    <TBL_ID>1</TBL_ID> 
    <TBL_Name>test4</TBL_Name> 
    <MD_ID>2</MD_ID> 
    </Tables> 
    <Tables> 
    <TBL_ID>2</TBL_ID> 
    <TBL_Name>test5</TBL_Name> 
    <MD_ID>2</MD_ID> 
    </Tables> 
    <Tables> 
    <TBL_ID>3</TBL_ID> 
    <TBL_Name>test6</TBL_Name> 
    <MD_ID>2</MD_ID> 
    </Tables> 
    </LVL2> 
    </root>"; 

XDocument xdoc = XDocument.Parse(xmlInput); 

var filteredXML = 
    xdoc.Descendants("root") 
    .Elements("LVL2") 
    .Elements("Tables") 
    .Where(x => string.Compare(x.Element("MD_ID").Value, "1") == 0) 
    .Select(x => x.Element("TBL_Name").Value) 
    .ToList(); 

Console.WriteLine(filteredXML); 

См следующие пространства имен:

using System.Xml.Linq; 
+0

Использует ли LINQ функцию C#? Какие пространства имен мне нужно импортировать для использования классов, упомянутых в фрагменте кода? – RBT

+0

Вам нужно обратиться к 'using System.Xml.Linq;' –