Le principal moyen de lecture et d'écriture en C # 2.0 se fait via la classe XmlDocument . Vous pouvez charger la plupart de vos paramètres directement dans le XmlDocument via le XmlReader qu'il accepte.
Chargement direct de XML
XmlDocument document = new XmlDocument();
document.LoadXml("<People><Person Name='Nick' /><Person Name='Joe' /></People>");
Chargement de XML à partir d'un fichier
XmlDocument document = new XmlDocument();
document.Load(@"C:\Path\To\xmldoc.xml");
XmlReader reader = XmlReader.Create(@"C:\Path\To\xmldoc.xml");
document.Load(reader);
Je trouve que le moyen le plus simple / le plus rapide de lire un document XML est d'utiliser XPath.
Lire un document XML à l'aide de XPath (à l'aide de XmlDocument qui nous permet d'éditer)
XmlDocument document = new XmlDocument();
document.LoadXml("<People><Person Name='Nick' /><Person Name='Joe' /></People>");
XmlNode node = document.SelectSingleNode("/People/Person[@Name = 'Nick']");
XmlNodeList nodes = document.SelectNodes("/People/Person");
Si vous devez travailler avec des documents XSD pour valider un document XML, vous pouvez l'utiliser.
Validation de documents XML par rapport aux schémas XSD
XmlReaderSettings settings = new XmlReaderSettings();
settings.ValidateType = ValidationType.Schema;
settings.Schemas.Add("", pathToXsd);
XmlReader reader = XmlReader.Create(pathToXml, settings);
XmlDocument document = new XmlDocument();
try {
document.Load(reader);
} catch (XmlSchemaValidationException ex) { Trace.WriteLine(ex.Message); }
Validation de XML par rapport à XSD à chaque nœud (UPDATE 1)
XmlReaderSettings settings = new XmlReaderSettings();
settings.ValidateType = ValidationType.Schema;
settings.Schemas.Add("", pathToXsd);
settings.ValidationEventHandler += new ValidationEventHandler(settings_ValidationEventHandler);
XmlReader reader = XmlReader.Create(pathToXml, settings);
while (reader.Read()) { }
private void settings_ValidationEventHandler(object sender, ValidationEventArgs args)
{
}
Ecrire un document XML (manuellement)
XmlWriter writer = XmlWriter.Create(pathToOutput);
writer.WriteStartDocument();
writer.WriteStartElement("People");
writer.WriteStartElement("Person");
writer.WriteAttributeString("Name", "Nick");
writer.WriteEndElement();
writer.WriteStartElement("Person");
writer.WriteStartAttribute("Name");
writer.WriteValue("Nick");
writer.WriteEndAttribute();
writer.WriteEndElement();
writer.WriteEndElement();
writer.WriteEndDocument();
writer.Flush();
(MISE À JOUR 1)
Dans .NET 3.5, vous utilisez XDocument pour effectuer des tâches similaires. La différence cependant est que vous avez l'avantage d'exécuter des requêtes Linq pour sélectionner les données exactes dont vous avez besoin. Avec l'ajout d'initialiseurs d'objets, vous pouvez créer une requête qui renvoie même des objets de votre propre définition directement dans la requête elle-même.
XDocument doc = XDocument.Load(pathToXml);
List<Person> people = (from xnode in doc.Element("People").Elements("Person")
select new Person
{
Name = xnode.Attribute("Name").Value
}).ToList();
(MISE À JOUR 2)
Un bon moyen dans .NET 3.5 est d'utiliser XDocument pour créer du XML ci-dessous. Cela fait apparaître le code dans un modèle similaire à la sortie souhaitée.
XDocument doc =
new XDocument(
new XDeclaration("1.0", Encoding.UTF8.HeaderName, String.Empty),
new XComment("Xml Document"),
new XElement("catalog",
new XElement("book", new XAttribute("id", "bk001"),
new XElement("title", "Book Title")
)
)
);
crée
<catalog>
<book id="bk001">
<title>Book Title</title>
</book>
</catalog>
Tout le reste échoue, vous pouvez consulter cet article MSDN qui contient de nombreux exemples dont j'ai discuté ici et plus encore.
http://msdn.microsoft.com/en-us/library/aa468556.aspx