Das primäre Mittel zum Lesen und Schreiben in C # 2.0 erfolgt über die XmlDocument- Klasse. Sie können die meisten Ihrer Einstellungen über den akzeptierten XmlReader direkt in das XmlDocument laden.
XML direkt laden
XmlDocument document = new XmlDocument();
document.LoadXml("<People><Person Name='Nick' /><Person Name='Joe' /></People>");
Laden von XML aus einer Datei
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);
Ich finde, der einfachste / schnellste Weg, ein XML-Dokument zu lesen, ist die Verwendung von XPath.
Lesen eines XML-Dokuments mit XPath (Verwenden von XmlDocument, mit dem wir es bearbeiten können)
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");
Wenn Sie mit XSD-Dokumenten arbeiten müssen, um ein XML-Dokument zu validieren, können Sie dies verwenden.
Validieren von XML-Dokumenten anhand von XSD-Schemas
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); }
Validierung von XML gegen XSD an jedem Knoten (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
}
Schreiben eines XML-Dokuments (manuell)
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();
(UPDATE 1)
In .NET 3.5 verwenden Sie XDocument, um ähnliche Aufgaben auszuführen. Der Unterschied besteht jedoch darin, dass Sie den Vorteil haben, Linq-Abfragen durchzuführen, um genau die Daten auszuwählen, die Sie benötigen. Durch Hinzufügen von Objektinitialisierern können Sie eine Abfrage erstellen, die sogar Objekte Ihrer eigenen Definition direkt in der Abfrage selbst zurückgibt.
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();
(UPDATE 2)
Eine gute Möglichkeit in .NET 3.5 ist die Verwendung von XDocument zum Erstellen von XML. Dadurch erscheint der Code in einem ähnlichen Muster wie die gewünschte Ausgabe.
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")
)
)
);
schafft
<!--Xml Document-->
<catalog>
<book id="bk001">
<title>Book Title</title>
</book>
</catalog>
Alles andere schlägt fehl. Sie können diesen MSDN-Artikel lesen, der viele Beispiele enthält, die ich hier und mehr besprochen habe.
http://msdn.microsoft.com/en-us/library/aa468556.aspx