Le principal moyen de lire et d'écrire en C# 2.0 se fait par l'intermédiaire de la fonction XmlDocument classe. Vous pouvez charger la plupart de vos paramètres directement dans le XmlDocument grâce au XmlReader qu'il accepte.
Chargement direct du 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");
// Or using an XmlReader/XmlTextReader
XmlReader reader = XmlReader.Create(@"C:\Path\To\xmldoc.xml");
document.Load(reader);
Je trouve que le moyen le plus simple et le plus rapide de lire un document XML est d'utiliser XPath.
Lecture d'un document XML à l'aide de XPath (en utilisant XmlDocument qui nous permet d'éditer)
XmlDocument document = new XmlDocument();
document.LoadXml("<People><Person Name='Nick' /><Person Name='Joe' /></People>");
// Select a single node
XmlNode node = document.SelectSingleNode("/People/Person[@Name = 'Nick']");
// Select a list of nodes
XmlNodeList nodes = document.SelectNodes("/People/Person");
Si vous devez travailler avec des documents XSD pour valider un document XML, vous pouvez l'utiliser.
Validation des documents XML par rapport aux schémas XSD
XmlReaderSettings settings = new XmlReaderSettings();
settings.ValidateType = ValidationType.Schema;
settings.Schemas.Add("", pathToXsd); // targetNamespace, pathToXsd
XmlReader reader = XmlReader.Create(pathToXml, settings);
XmlDocument document = new XmlDocument();
try {
document.Load(reader);
} catch (XmlSchemaValidationException ex) { Trace.WriteLine(ex.Message); }
Validation du XML par rapport au XSD à chaque nœud (UPDATE 1)
XmlReaderSettings settings = new XmlReaderSettings();
settings.ValidateType = ValidationType.Schema;
settings.Schemas.Add("", pathToXsd); // targetNamespace, pathToXsd
settings.ValidationEventHandler += new ValidationEventHandler(settings_ValidationEventHandler);
XmlReader reader = XmlReader.Create(pathToXml, settings);
while (reader.Read()) { }
private void settings_ValidationEventHandler(object sender, ValidationEventArgs args)
{
// e.Message, e.Severity (warning, error), e.Error
// or you can access the reader if you have access to it
// reader.LineNumber, reader.LinePosition.. etc
}
Écrire 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 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'initialisateurs 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)
Une façon agréable dans .NET 3.5 est d'utiliser XDocument pour créer le XML est ci-dessous. Cela permet de faire apparaître le code de manière 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
<!--Xml Document-->
<catalog>
<book id="bk001">
<title>Book Title</title>
</book>
</catalog>
En cas d'échec, vous pouvez consulter cet article de MSDN qui contient de nombreux exemples dont j'ai parlé ici et d'autres encore. http://msdn.microsoft.com/en-us/library/aa468556.aspx
1 votes
Pour ceux qui essaient également de trouver une solution plus pratique, ignorez ceci. C'est une ancienne bibliothèque .NET. Utilisez XDocument à la place, et vous éviterez de vous arracher les yeux de frustration.