Как я могу преобразовать XML в Список <строка> или Строка []?

Отличным примером в .NET Framework является интерфейс INotifyPropertyChanged . Этот интерфейс состоит только из одного члена: события PropertyChanged .

В WPF вы можете указать, что элемент управления будет отображать определенное свойство экземпляра объекта. Но как этот элемент управления обновится, если изменится базовое свойство?

Если связанный объект реализует интерфейс INotifyPropertyChanged , среда WPF может просто прослушать PropertyChanged и обновить соответствующим образом.

16
задан GEOCHET 5 June 2009 в 16:17
поделиться

5 ответов

Похоже, вы больше после простого синтаксического анализа, а не после полной сериализации / десериализации XML. Если вы можете использовать LINQ to XML, это довольно просто:

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

public class Test
{
    static void Main()
    {
        string xml = "<Ids><id>1</id><id>2</id></Ids>";

        XDocument doc = XDocument.Parse(xml);

        var list = doc.Root.Elements("id")
                           .Select(element => element.Value)
                           .ToList();

        foreach (string value in list)
        {
            Console.WriteLine(value);
        }
    }
}

Фактически, вызов Elements может опустить аргумент, поскольку там есть только только id элементов. , но я подумал, что продемонстрирую, как указать, какие элементы вам нужны.

Точно так же я обычно не утруждал себя вызовом ToList , если мне действительно не нужен был List - без него результатом будет IEnumerable , что нормально, если вы просто повторяете его один раз. Чтобы вместо этого создать массив, используйте ToArray .

46
ответ дан 30 November 2019 в 15:09
поделиться

Вот способ использования XmlDocument:

// A string containing the XML data
string xml = "<Ids><id>1</id><id>2</id></Ids>";
// The list you want to fill
ArrayList list = new ArrayList();

XmlDocument doc = new XmlDocument();
// Loading from a XML string (use Load() for file)
doc.LoadXml(xml); 
// Selecting node using XPath syntax
XmlNodeList idNodes = doc.SelectNodes("Ids/id");
// Filling the list
foreach (XmlNode node in idNodes)
    list.Add(node.InnerText);
18
ответ дан 30 November 2019 в 15:09
поделиться

Этот образец будет работать с .NET framework 3.5:

    System.Xml.Linq.XElement element = System.Xml.Linq.XElement.Parse("<Ids>  <id>1</id>  <id>2</id></Ids>");
    System.Collections.Generic.List<string> ids = new System.Collections.Generic.List<string>();
    foreach (System.Xml.Linq.XElement childElement in element.Descendants("id"))
    {
        ids.Add(childElement.Value);
    }
1
ответ дан 30 November 2019 в 15:09
поделиться

Вы можете использовать класс Properties.

Properties prop = new Properties();
prop.loadFromXML(stream);
Set set = prop.keySet();

Вы можете получить доступ к строкам из набора для каждого ключа. Ключ - это имя элемента xml.

0
ответ дан 30 November 2019 в 15:09
поделиться

Вот способ получить типизированный массив из xml с помощью DataSets. (в данном примере - массив двойников)

DataSet dataSet = new DataSet()
DoubleArray doubles = new DoubleArray(dataSet,0);

dataSet.ReadXml("my.xml");
double a = doubles[0];



public class DoubleArray
{
  DataSet dataSet;
  int tableIndex;
  public DoubleArray(DataSet dataSet,int tableIndex)
  {
    this.dataSet=dataSet;
    this.tableIndex=tableIndex;
  }

  public double this[int index]
  {
    get
    { 
      object ret = dataSet.Tables[tableIndex].Rows[index];
      if(ret is double?) 
        return (ret as double?).Value;
      else
        return double.Parse(ret as string);
    }
    set
    {
      object out = dataSet.Tables[tableIndex].Rows[index];
      if(out is double?)
        dataSet.Tables[tableIndex].Rows[index] = (double?)value;
      else
        dataSet.Tables[tableIndex].Rows[index] = value.ToString();
    }
  }
}

Конечно, постоянный синтаксический анализ двойников и их преобразование обратно в строки некоторыми программистами может рассматриваться как богохульство ... Даже мне было трудно не думать о такой трате ресурсов. .. но я думаю, иногда лучше просто отвернуть другого .. не подчеркивайте это :)

0
ответ дан 30 November 2019 в 15:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: