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


Автор: golfV 3.3.2010, 10:40
Доброго времени суток!

Появился такой вопросик. Есть xml файл.
Код

 <case>
    <id>1</id>
    <boardname>asdfg</boardname>
    <radiatorname>small</radiatorname>
    <lowlim>12,9</lowlim>
    <highlim>16</highlim>
  </case>
  <case>
    <id>2</id>
    <boardname>abcda</boardname>
    <radiatorname>big</radiatorname>
    <lowlim>2,2</lowlim>
    <highlim>2,8</highlim>
  </case>

как вывести из него в комбобокс все значения boardname? 
пробовал сделать так, но неполучается, подскажите как это сделать?
Код

ArrayList myAl = new ArrayList();
                   XmlTextReader reader = new XmlTextReader(sCurDir + @"\a.xml");
                   reader.WhitespaceHandling = WhitespaceHandling.None;

                   while (reader.Read())
                       if (reader.NodeType == XmlNodeType.Element)
                           if (reader.Name == "case")
                           {

                               comboBox2.Items.Add(reader.ReadElementString("boardname"));
                           }

Автор: golfV 3.3.2010, 11:19
уже разобрался=)
Код

ArrayList myAl = new ArrayList();
                   XmlTextReader reader = new XmlTextReader(sCurDir + @"\scale.xml");
                   reader.WhitespaceHandling = WhitespaceHandling.None;

                   while (reader.Read())
                       if (reader.NodeType == XmlNodeType.Element)
                           if (reader.Name == "boardname")
                           {
  
                               comboBox2.Items.Add(reader.ReadElementString("boardname"));
                           }

Автор: mrbrooks 3.3.2010, 11:29
Код

using System.Xml;
using System.Xml.Linq;

        private void BtnTest_Click(object sender, EventArgs e)
        {
            OpenFileDialog dlg = new OpenFileDialog();
            dlg.Filter = "*.xml|*.xml";
            if (dlg.ShowDialog() == DialogResult.OK)
            {
                XElement elem = XElement.Load(dlg.FileName);
                foreach (XElement el in elem.Elements("case").Elements("boardname")) comboBox.Items.Add(el.Value);
            }
        }


Автор: golfV 3.3.2010, 11:37
Возник еще вопросик. как сделать чтоб когда я выбрал в комбобоксе "boardname" то ниже в текстбокс отобразилось бы значение "radiator name"?

[/code]
Код

<case>
  <case>
    <id>1</id>
    <boardname>asdfg</boardname>
    <radiatorname>small</radiatorname>
    <lowlim>12,9</lowlim>
    <highlim>16</highlim>
  </case>
  <case>
    <id>2</id>
    <boardname>abcda</boardname>
    <radiatorname>big</radiatorname>
    <lowlim>2,2</lowlim>
    <highlim>2,8</highlim>
  </case>



Автор: ДобренькийПапаша 3.3.2010, 11:41
Так работает.
Код

class Program
    {
        static void Main(string[] args)
        {
            //ArrayList myAl = new ArrayList();
            XmlTextReader reader = new XmlTextReader("XmlTest.xml");
            reader.WhitespaceHandling = WhitespaceHandling.None;
            //reader.
            while (reader.Read())
            {
                if (reader.NodeType == XmlNodeType.Element)
                {
                    if (reader.Name == "boardname")
                    {
                        reader.Read();
                        Console.WriteLine("BoardName:{0}",reader.Value);
                    }
                }
            }
            Console.ReadLine();
        }
    }

Автор: golfV 3.3.2010, 11:53
с этим разобрался, спасибо за советы, подскажите как сделать чтоб когда я выбрал в комбобоксе "boardname" то ниже в текстбокс отобразилось бы значение "radiator name"?
пробую так но неполучается
Код

 DataRow[] datarows = null;
                                   
  try
  {
      string rn = combobox2.Text;
      datarows = MyDatatable.Select("boardname=" + rn);
  }
  catch (Exception ex)
  {
      MessageBox.Show(ex.ToString());
  }
  if (datarows.Length > 0)
  {
   foreach (DataRow datarow in datarows)
   {
       textBox6.Text = datarow["radiatorname"].ToString();
    }
   
   }

Автор: mrbrooks 4.3.2010, 16:15
Код

        private void BtnTest_Click_Click(object sender, EventArgs e)
        {
            OpenFileDialog dlg = new OpenFileDialog();
            dlg.Filter = "*.xml|*.xml";
            if (dlg.ShowDialog() == DialogResult.OK)
            {
                XElement elem = XElement.Load(dlg.FileName);
                var res = elem.Elements("case")
                    .Select(f => new { first = f.Element("boardname").Value, second = f.Element("radiatorname").Value })
                    .ToList();
                comboBox.DataSource = res;
                comboBox.DisplayMember = "first";
                comboBox.SelectedIndexChanged += (obj, args) => textBox.AppendText(res[comboBox1.SelectedIndex].second);
            }
        }

Автор: golfV 4.3.2010, 17:43
большое спасибо, теперь все работает

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