2012-07-02 2 views
0

У меня есть окна формы с 3 выпадающими списками и XML-файл следующим образомПолучение данных XML в комбобокс

<?xml version="1.0"?> 
<shrtcutkeys> 
    <Keysmain> 
     <keychars> 
      <key1> 
       Ctrl 
      </key1> 
      <key1> 
       Alt 
      </key1> 
      <key1> 
       Shift 
      </key1> 
     </keychars> 
    </Keysmain> 
    <Seckeys> 
     <keychars> 
      <key2> 
       Ctrl 
      </key2> 
      <key2> 
       Alt 
      </key2> 
      <key2> 
       Shift 
      </key2> 
     </keychars> 
    </Seckeys> 
    <Alphas> 
     <keychars> 
      <key3> 
       a 
      </key3> 
      <key3> 
       b 
      </key3> 
      <key3> 
       c 
      </key3> 
     </keychars> 
    </Alphas> 
</shrtcutkeys> 

Так я хотел бы, чтобы отобразить все key1 в ComboBox1 и все key2 в combox2 и так далее, так далее. .tried сделать это, но на самом деле не работает

DataSet dsSet = new DataSet(); 
      dsSet.ReadXml("C:\\Users\\jackandjill\\Documents\\Visual Studio 2010\\Projects\\highlite\\highlite\\keys.xml"); 
      comboBox1.DataSource = dsSet.Tables["keys"]; 
      comboBox1.DisplayMember = "key1"; 

ответ

4

Я предпочитаю использовать Linq2XML:

Загрузить данные в XDocument:
Вы можете либо загрузить из файла:

var xmlDocument = XDocument.Load(fileName); 

или загрузить из строки

var xmlDocument = XDocument.Parse(@"<?xml version=""1.0""?> 
<shrtcutkeys> 
    <Keysmain> 
     <keychars> 
      <key1> 
       Ctrl 
      </key1> 
      <key1> 
       Alt 
      </key1> 
      <key1> 
       Shift 
      </key1> 
     </keychars> 
    </Keysmain> 
    <Seckeys> 
     <keychars> 
      <key2> 
       Ctrl 
      </key2> 
      <key2> 
       Alt 
      </key2> 
      <key2> 
       Shift 
      </key2> 
     </keychars> 
    </Seckeys> 
    <Alphas> 
     <keychars> 
      <key3> 
       a 
      </key3> 
      <key3> 
       b 
      </key3> 
      <key3> 
       c 
      </key3> 
     </keychars> 
    </Alphas> 
</shrtcutkeys>"); 

Затем вы можете выбрать нужный пункты

var mainItems = from key in xmlDocument.Descendants("key1") 
       select key.Value; 
var secKeyItems = from key in xmlDocument.Descendants("key2") 
       select key.Value; 
var alphaItems = from key in xmlDocument.Descendants("key3") 
       select key.Value; 

Теперь вы можете связать каждый комбо для выбранного результата, как это:

comboBox1.DataSource = mainItems.ToList(); 

Вы можете мыть XML (для удаления строки и пробелы)

var mainItems = from key in xmlDocument.Descendants("key1") 
       select key.Value.Trim(); 
var secKeyItems = from key in xmlDocument.Descendants("key2") 
       select key.Value.Trim(); 
var alphaItems = from key in xmlDocument.Descendants("key3") 
       select key.Value.Trim(); 
+0

Это такой большой ответ, но одна вещь, которую я не понимаю, что почему что когда я делаю это var xmlDocument = XDocument.Parse (@ "C: \\ Users \\ jackandjill \\ Documents \\ Visual Studio 2010 \\ Projects \\ highlite \\ highlite \\ keys.xml"); Я получаю сообщение об ошибке: «Данные на корневом уровне недействительны. Строка 1, позиция 1.» – JackyBoi

+0

Для загрузки из файла вместо него используется 'XDocument.Load'. Кроме того, не используйте как '@', так и двойную обратную косую черту ('\\'). '@' отключает все экранирование. –

2

Usinq LINQ к XML:

var xml = XElement.Parse(
       @"<shrtcutkeys> 
         <Keysmain> 
          <keychars> 
           <key1> 
            Ctrl 
           </key1> 
           <key1> 
            Alt 
           </key1> 
           <key1> 
            Shift 
           </key1> 
          </keychars> 
         </Keysmain> 
         <Seckeys> 
          <keychars> 
           <key2> 
            Ctrl 
           </key2> 
           <key2> 
            Alt 
           </key2> 
           <key2> 
            Shift 
           </key2> 
          </keychars> 
         </Seckeys> 
         <Alphas> 
          <keychars> 
           <key3> 
            a 
           </key3> 
           <key3> 
            b 
           </key3> 
           <key3> 
            c 
           </key3> 
          </keychars> 
         </Alphas> 
        </shrtcutkeys>"); 

var key1 = xml.Descendants("key1"); 

foreach (var key in key1) 
    comboBox1.Items.Add(key.Value.Trim()); 

var key2 = xml.Descendants("key2"); 

foreach (var key in key2) 
    comboBox2.Items.Add(key.Value.Trim()); 

//Do the same for other keys... 
+0

Tks так много для того, чтобы показать мне еще одну причину, чтобы узнать LINQ! но я не понимаю, почему это происходит, когда я делаю это var xmlDocument = XDocument.Parse (@ "C: \\ Users \\ jackandjill \\ Documents \\ Visual Studio 2010 \\ Projects \\ highlite \\ highlite \ \ keys.xml "); Я получаю сообщение об ошибке: «Данные на корневом уровне недействительны. Строка 1, позиция 1.» – JackyBoi

+0

@JackyBoi - Нет ничего плохого в вашем xml, но 'XDocument.Parse' предназначен для загрузки xml из строки, а не из имени файла, поэтому попробуйте сделать« XDocument.Load »вместо этого. – SNH

+0

haha ​​довольно смешно на моем пути, чтобы работать, это поразило меня, и я попробовал и отлично работал ... так много! – JackyBoi

Смежные вопросы