Самый простой способ заполнить коллекцию из файла XML в .NET - PullRequest
0 голосов
/ 26 августа 2009

У меня есть следующий XML-файл:

<?xml version="1.0" encoding="utf-8" ?>
<scripts>
  <ScriptName>
    <name>
        "My Name"
    </ScriptName>
    <ScriptBody>
        "body contents"
    </ScriptBody>
  </script>
</scripts>

И следующий объект:

    public class DbScript
{
    #region Constructors
    public DbScript()
        : this(string.Empty, string.Empty)
    {
    }
    public DbScript(string name, string body)
    {
        ScriptName = name;
        ScriptBody = body;
    }
    #endregion
    #region Properties
    /// <summary>
    /// Script name
    /// </summary>
    public string ScriptName { get; set; }
    /// <summary>
    /// Script body
    /// </summary>
    public string ScriptBody { get; set; }
    #endregion
}

Какой самый быстрый способ заполнить коллекцию объектов DBScript из содержимого файла XML? Стоит ли искать сериализаторы?

Спасибо!

Ответы [ 3 ]

3 голосов
/ 26 августа 2009

Использование .Net Serialization абсолютно мое предпочтение, в этом случае вы бы десериализовали файл в объект. Если вы возьмете свой XML (который я немного отредактировал):

<?xml version="1.0" encoding="utf-8" ?>
<scripts>
  <script>
    <ScriptName>
        "My Name"
    </ScriptName>
    <ScriptBody>
        "body contents"
    </ScriptBody>
  </script>
</scripts>

Затем вы создаете несколько классов, представляющих xml:

public class Scripts
{

  /// <summary>
  /// only allow xml serializer to create instances.
  /// </summary>
  private Scripts()
  {        
  }
  [XmlElement]
  public List<script> script{ get; set; }
}
public class script
{
  public script()
  {
  }

  [XmlElement]
  public string ScriptName { get; set; }

  [XmlElement]
  public string ScriptBody{ get; set; }
}

А затем, когда все настроено правильно, вы можете десериализовать файл:

string xmlFilePath = "THE_PATH_TO_THE_XML";
XmlSerializer xmlSerializer = new XmlSerializer(typeof(Scripts));
using (XmlReader xmlReader = XmlReader.Create(xmlFilePath))
{
    Scripts scripts = (Scripts)xmlSerializer.Deserialize(xmlReader);
}

Сериализация XML действительно мощная, посмотрите в документации: http://msdn.microsoft.com/en-us/library/ms950721.aspx.

Робб

3 голосов
/ 26 августа 2009

Предполагая, что вы хотели ввести синтаксис XML следующим образом:

<?xml version="1.0" encoding="utf-8" ?>
<scripts>
  <script>
    <ScriptName>
        "My Name"
    </ScriptName>
    <ScriptBody>
        "body contents"
    </ScriptBody>
  </script>
</scripts>

Тогда этот код должен разобрать его. Непроверенные.

var doc = XDocument.Load("input.xml");
var x = from script in doc.Descendants("scripts").Descendants("script")
        select new {
            Name = script.Element("ScriptName").Value,
            Body = script.Element("ScriptBody").Value
        };
2 голосов
/ 26 августа 2009
    var document = XElement.Load(fileName);
    var collection = from elem in document.Elements("script")
                     select new DBScript(
                                  elem.Element("ScriptName").Value,
                                  elem.Element("ScriptBody").Value
                                );

поможет тебе

...