在C#2.0中的主要读写方式是通过XmlDocument类来完成的。您可以通过它接受的XmlReader将大部分设置直接加载到XmlDocument中。
直接加载XML
- XmlDocument document = new XmlDocument();
- document.LoadXml("<People><Person Name='Nick' /><Person Name='Joe' /></People>");
从文件加载XML
- 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);
我发现读取XML文档最简单/最快的方法是使用XPath。
使用XPath读取XML文档(使用允许我们编辑的XmlDocument)
- 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");
如果您需要使用XSD文档来验证XML文档,您可以使用此文档。
针对XSD模式验证XML文档
- 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); }
在每个节点上针对XSD验证XML(更新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)
- {
- // 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
- }
编写XML文档(手动)
- 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();
(更新1)
在.NET 3.5中,您使用XDocument执行类似的任务。不同之处在于,您有执行Linq查询以选择所需的准确数据的优势。通过添加对象初始化器,您可以创建一个查询,它甚至可以在查询本身中返回您自己定义的对象。
- 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();
(更新2)
.NET 3.5中的一个好方法是使用XDocument创建XML,如下所示。这使得代码以与期望输出类似的模式出现。
- 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")
- )
- )
- );
创建
- <!--Xml Document-->
- <catalog>
- <book id="bk001">
- <title>Book Title</title>
- </book>
- </catalog>
所有的失败,你可以查看这个MSDN文章有很多例子,我已经讨论过这里和更多。
http://msdn.microsoft.com/en-us/library/aa468556.aspx