加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何处理XML在C#

发布时间:2020-12-16 08:14:57 所属栏目:百科 来源:网络整理
导读:在C#2.0中处理XML文档,XSD等的最好方法是什么? 使用哪些类等。解析和生成XML文档的最佳做法等。 编辑:.Net 3.5的建议也欢迎。 在C#2.0中的主要读写方式是通过XmlDocument类来完成的。您可以通过它接受的XmlReader将大部分设置直接加载到XmlDocument中。
在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文章有很多例子,我已经讨论过这里和更多。
http://msdn.microsoft.com/en-us/library/aa468556.aspx

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读