2015-10-15 2 views
0

XML код C - Импорт данных в Listbox из XML

-<RegionBox> 

<Regions>fdzg</Regions> 

<Regions>asgfasd</Regions> 

<Regions>sdfadga</Regions> 

<Regions>adsfgsfha</Regions> 

</RegionBox> 

Как сохранить XML

XElement element = new XElement("RegionBox"); 
     foreach (var item in listBox1.Items) 
     { 
      element.Add(new XElement("Regions", item)); 


      //DataRow listRow = ds.Tables["RegionBox"].NewRow(); 
      //listRow["List"] = listBox1.Items; 
      //Console.WriteLine(item); 
     } 
     XDocument document = new XDocument(); 
     document.Add(element); 
     document.Save("XMLFile2.xml"); 

Я хочу, чтобы иметь возможность импортировать данные обратно в поле Список в настоящее время I «пробовал

  ds.ReadXml("XMLFile2.xml"); 
     { 
     for (int i = 0; i < ds.Tables["RegionBox"].Columns.Count; i++) 
      listBox1.Items.Add(ds.Tables["Regions"].Rows[0][i].ToString()); 
     setImage.BackgroundImage = System.Drawing.Image.FromFile(filePath.Text); 
     } 

и

  XDocument xmlDoc = XDocument.Load("XMLFile2.xml"); 
     var items = (from i in xmlDoc.Descendants("Regions") 
        select new { Item = i.Element("Regions").Value }).ToList(); 
        listBox1.DataSource = items; 

Но я не могу заставить его импортировать информацию ... хотя мне удалось получить либо первый элемент, либо последний элемент, но можно импортировать только один и не все элементы.

Благодаря

ответ

0

UPDATE :: только после размещения этого я обнаружил, что я продолжил поиски, а затем нашел тот, который работал

  XElement element = XElement.Load("XMLFile2.xml"); 
     foreach (XElement item in element.Elements("Regions")) 
     listBox1.Items.Add(item.Value); 
0
  1. select new { Item = i.Element("Regions").Value }) я S неправильно, потому что параметр i уже элемент Regions, так что вам просто нужно изменить код, как select new { Item = i.Value })
  2. Я dont't знаю, есть ли у вас установить DisplayMember, может быть, вы должны добавить этот код listBox1.DisplayMember = "Item";
0

не знаю, если это будет делать много смысла, но в отношении чтения данных XML, а затем отображать его -

XmlTextReader xReader = new XmlTextReader("../../Products.xml"); 
     xReader.WhitespaceHandling = WhitespaceHandling.None; 
     XmlDocument xDoc = new XmlDocument(); 
     xDoc.Load(xReader); 
     Console.WriteLine("Please enter product..."); 
     string product = Console.ReadLine(); 
     XmlNodeList xNodeList = xDoc.DocumentElement.SelectNodes("//Products/Product"); 

     foreach (XmlNode xNode in xNodeList) 
     { 
      if (xNode.NodeType == XmlNodeType.Element) 
      { 
       // Console.WriteLine(xNode.NodeType.ToString() + " : " + xNode.Name + " =" + xNode.FirstChild.InnerText); 
       if (xNode.FirstChild.InnerText == product) 
       { 
        string name = xNode.FirstChild.InnerText; 
        string price = xNode.FirstChild.NextSibling.InnerText; 
        Console.WriteLine("Name: " + name + "... Price: R" + price); 
       } 
       else 
       { 
        Console.WriteLine("No Price"); 
       } 
      } 
     } 
     Console.ReadLine(); 

с файл XML является products.xml -

<Products> 
<Product> 
    <name>Bread</name> 
    <price>10</price> 
</Product> 
<Product> 
    <name>Milk</name> 
    <price>20</price> 
</Product> 
<Product> 
    <name>Coke</name> 
    <price>18</price> 
</Product> 
<Product> 
    <name>BarOne</name> 
    <price>7</price> 
</Product> 

Некоторые пояснения:

XmlTextReader могут быть доступны только после добавления к помощи System.Xml; пространство имен, как только вы инициализируете XmlTextReader (xReader), вы можете загрузить его с помощью XML-файла, my - это Product.xml, в котором найдены 2 папки из папки отладки, следовательно ((.. ..../ ») пропуская две папки назад, которая на самом деле является корневой папкой, но 2 папки из папки «debug».

xmlNodeList выбирает узлы, то, что я там делал, выбирает только Продукт, поэтому следующий узел - это имя, а следующий узел-брат - это цена.

Я уверен, что цикл Еогеаспа сам пояснительный, первой, если оператор гарантирует, что узел является элементом, второго, если оператор проверяет, если название продукта (хлеб, молоко и т.д.) совпадает, что пользователь введенный в начале. Если это так, то строка создается и называется «имя», потому что первым дочерним является имя, и мы хотим, чтобы значение узла было таким, поэтому innerText получит это для нас.

Чтобы получить цену, мы просто скажем xNode.FirstChild.NextSibling.InnerText, это переместится от следующего узла, что и есть то, что мы хотим.

Надеюсь, это поможет?

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