2009-08-26 7 views
0

je le fichier XML suivant:La meilleure façon de remplir une collection de fichiers XML dans .NET

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

Et l'objet suivant:

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 
} 

Quel est le moyen le plus rapide pour remplir la collection d'objet DBScript à partir du contenu du fichier XML? Devrais-je examiner les sérialiseurs?

Merci!

+0

Votre fichier XML n'est pas bien formé. Sans XML bien formé, vous ne pourrez pas faire grand-chose. –

Répondre

3

En utilisant .Net sérialisation est tout à fait ma préférence, dans ce cas, vous désérialiser le fichier à un objet. Si vous prenez votre xml (que j'édité un peu):

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

Ensuite, vous créez certaines classes les représente le 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; } 
} 

Et puis, quand cela est tout configuré correctement, vous pouvez désérialiser le fichier:

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); 
} 

sérialisation Xml est vraiment puissant, vérifier dans la documentation: http://msdn.microsoft.com/en-us/library/ms950721.aspx.

robb

+1

-1 pour utiliser 'XmlTextReader' au lieu de' XmlReader.Create', et pour ne pas implémenter un bloc 'using'. –

+1

Oui XmlReader.Create est le chemin à parcourir, ne s'en est pas rendu compte. Et, bonne prise sur la déclaration d'utilisation ... –

3

en admettant que vous taper signifie la syntaxe XML comme ceci:

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

Ensuite, ce code devrait l'analyser. Non testé

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
var document = XElement.Load(fileName); 
    var collection = from elem in document.Elements("script") 
        select new DBScript(
            elem.Element("ScriptName").Value, 
            elem.Element("ScriptBody").Value 
           ); 

fera l'affaire pour toi

Questions connexes