在C#2.0中处理XML文档,XSD等的最佳方法是什么?
使用哪些类等。解析和制作XML文档等的最佳实践是什么。
编辑:.Net 3.5建议也欢迎。
C#2.0中的主要读写方法是通过 XmlDocument 类完成的。您可以通过接受的XmlReader将大多数设置直接加载到XmlDocument中。
XmlDocument document = new XmlDocument(); document.LoadXml("<People><Person Name='Nick' /><Person Name='Joe' /></People>");
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。
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文档,则可以使用它。
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); }
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 }
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