如何处理XML在C#
在C#2.0中处理XML文档,XSD等的最好方法是什么?
使用哪些类等。解析和生成XML文档的最佳做法等。 编辑:.Net 3.5的建议也欢迎。
在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:PathToxmldoc.xml"); // Or using an XmlReader/XmlTextReader XmlReader reader = XmlReader.Create(@"C:PathToxmldoc.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文章有很多例子,我已经讨论过这里和更多。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |