如何处理XML在C#

前端之家收集整理的这篇文章主要介绍了如何处理XML在C#前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在C#2.0中处理XML文档,XSD等的最好方法是什么?

使用哪些类等。解析和生成XML文档的最佳做法等。

编辑:.Net 3.5的建议也欢迎。

在C#2.0中的主要读写方式是通过XmlDocument类来完成的。您可以通过它接受的XmlReader将大部分设置直接加载到XmlDocument中。

直接加载XML

  1. XmlDocument document = new XmlDocument();
  2. document.LoadXml("<People><Person Name='Nick' /><Person Name='Joe' /></People>");

文件加载XML

  1. XmlDocument document = new XmlDocument();
  2. document.Load(@"C:\Path\To\xmldoc.xml");
  3. // Or using an XmlReader/XmlTextReader
  4. XmlReader reader = XmlReader.Create(@"C:\Path\To\xmldoc.xml");
  5. document.Load(reader);

我发现读取XML文档最简单/最快的方法是使用XPath。

使用XPath读取XML文档(使用允许我们编辑的XmlDocument)

  1. XmlDocument document = new XmlDocument();
  2. document.LoadXml("<People><Person Name='Nick' /><Person Name='Joe' /></People>");
  3.  
  4. // Select a single node
  5. XmlNode node = document.SelectSingleNode("/People/Person[@Name = 'Nick']");
  6.  
  7. // Select a list of nodes
  8. XmlNodeList nodes = document.SelectNodes("/People/Person");

如果您需要使用XSD文档来验证XML文档,您可以使用此文档。

针对XSD模式验证XML文档

  1. XmlReaderSettings settings = new XmlReaderSettings();
  2. settings.ValidateType = ValidationType.Schema;
  3. settings.Schemas.Add("",pathToXsd); // targetNamespace,pathToXsd
  4.  
  5. XmlReader reader = XmlReader.Create(pathToXml,settings);
  6. XmlDocument document = new XmlDocument();
  7.  
  8. try {
  9. document.Load(reader);
  10. } catch (XmlSchemaValidationException ex) { Trace.WriteLine(ex.Message); }

在每个节点上针对XSD验证XML(更新1)

  1. XmlReaderSettings settings = new XmlReaderSettings();
  2. settings.ValidateType = ValidationType.Schema;
  3. settings.Schemas.Add("",pathToXsd
  4. settings.ValidationEventHandler += new ValidationEventHandler(settings_ValidationEventHandler);
  5.  
  6. XmlReader reader = XmlReader.Create(pathToXml,settings);
  7. while (reader.Read()) { }
  8.  
  9. private void settings_ValidationEventHandler(object sender,ValidationEventArgs args)
  10. {
  11. // e.Message,e.Severity (warning,error),e.Error
  12. // or you can access the reader if you have access to it
  13. // reader.LineNumber,reader.LinePosition.. etc
  14. }

编写XML文档(手动)

  1. XmlWriter writer = XmlWriter.Create(pathToOutput);
  2. writer.WriteStartDocument();
  3. writer.WriteStartElement("People");
  4.  
  5. writer.WriteStartElement("Person");
  6. writer.WriteAttributeString("Name","Nick");
  7. writer.WriteEndElement();
  8.  
  9. writer.WriteStartElement("Person");
  10. writer.WriteStartAttribute("Name");
  11. writer.WriteValue("Nick");
  12. writer.WriteEndAttribute();
  13. writer.WriteEndElement();
  14.  
  15. writer.WriteEndElement();
  16. writer.WriteEndDocument();
  17.  
  18. writer.Flush();

(更新1)

在.NET 3.5中,您使用XDocument执行类似的任务。不同之处在于,您有执行Linq查询以选择所需的准确数据的优势。通过添加对象初始化器,您可以创建一个查询,它甚至可以在查询本身中返回您自己定义的对象。

  1. XDocument doc = XDocument.Load(pathToXml);
  2. List<Person> people = (from xnode in doc.Element("People").Elements("Person")
  3. select new Person
  4. {
  5. Name = xnode.Attribute("Name").Value
  6. }).ToList();

(更新2)

.NET 3.5中的一个好方法是使用XDocument创建XML,如下所示。这使得代码以与期望输出类似的模式出现。

  1. XDocument doc =
  2. new XDocument(
  3. 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")
  4. )
  5. )
  6. );

创建

  1. <!--Xml Document-->
  2. <catalog>
  3. <book id="bk001">
  4. <title>Book Title</title>
  5. </book>
  6. </catalog>

所有的失败,你可以查看这个MSDN文章有很多例子,我已经讨论过这里和更多。
http://msdn.microsoft.com/en-us/library/aa468556.aspx

猜你在找的XML相关文章