怎么在c#中解析XML

  介绍

怎么在c#中解析XML ?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

& lt; ? xml  version=?.0“,编码=癠TF-8" ?比;   & lt; messages  xmlns=癶ttp://www.test.com/hit/rhin", xmlns: xsi=癶ttp://www.w3.org/2001/XMLSchema-instance", xsi: schemaLocation=癶ttp://www.test.com/hit/rhin 文件:///e:/request_message.xsd"比;   ,,,& lt;心跳/比;   ,,,& lt; switchset> & lt;/switchset>   ,,,& lt; business>   ,,,,,,,& lt; datasets>   ,,,,,,,,,,,& lt; setdetails>   ,,,,,,,,,,,,,,,& lt; WS02_01>内容& lt;/WS02_01>   ,,,,,,,,,,,& lt;/setdetails>   ,,,,,,,,,,,& lt; setdetails>   ,,,,,,,,,,,,,,,& lt; WS02_01>内容& lt;/WS02_01>   ,,,,,,,,,,,& lt;/setdetails>   ,,,,,,,& lt;/datasets>   ,,,& lt;/business>   & lt;/messages> <李>

xmlns是默认的命名空间,在有命名空间情况下,需要使用XmlNamespaceManager进行处理。

<李>

xmlns: xsi定义了一个命名空间前缀xsi对应的唯一字符串www.w3.org/2001/XMLSch…,而且这个xmlns: xsi在不同的xml文档中似乎都会出现。这是因为xsi已经成为了一个业界默认的用于XSD (xml模式定义)文件的命名空间。而XSD文件(也常常称为模式文件)是用来定义xml文档结构的。

xml解析器可以根据一个XSD文件的内容来解析另一个xml文件,判断该文件的结构是否和XSD文件中定义的一致。XSD文件可以理解为xml文档可以自定义的语法或格式检查器。

<李>

xsi: schemaLocation是一个由空格分开的键值对,前一个键www.test.com/hit/rhin是命名空间,是一个全局唯一字符串。后一个值是XSD位置URI,这个值指示了前一个命名空间所对应的XSD文件的位置,xml解析器可以利用这个信息获取到XSD文件,从而通过XSD文件对所有属于命名空间www.test.com/hit/rhin的元素结构进行校验,因此这个值必然是可以访问的,且访问到的内容是一个XSD文件的内容

具体实现代码:

//读取xml   ,,,XmlDocument  xml =, new  XmlDocument ();   ,,,xml.LoadXml (XMLData);   ,,,//命名空间处理   ,,,XmlNamespaceManager  m =, new  XmlNamespaceManager (xml.NameTable);   ,,,m.AddNamespace (“xsi",,“http://www.w3.org/2001/XMLSchema-instance");   ,,,m.AddNamespace (“d",,“http://www.test.com/hit/rhin");,//d是随意的一个命名   ,,,,   ,,,//读取数据节点,需要带上命名空间   ,,,XmlNodeList  dataNodeList =, xml.SelectNodes (“d:消息/d:商业/d:数据集/d: setdetails",,米);   ,,,if  (dataNodeList  !=, null ,,, dataNodeList.Count 祝辞,0)   ,,,{   ,,,,,,,for  (int 小姐:=,0;,小姐:& lt;, dataNodeList.Count;,我+ +)   ,,,,,,,{   ,,,,,,,,,,,var  model =,, XmlToEntity (dataNodeList[我].OuterXml,“http://www.test.com/hit/rhin");   ,,,,,,,}   ,,,,,,,,,,   ,,,}

XmlToEntity方法将xml反序列化到模型实体上。

privated  T  XmlToEntity (string  xml, string 名称空间)   ,,,{   ,,,,,,,T  obj =,违约(T);   ,,,,,,,试一试   ,,,,,,,{   ,,,,,,,,,,,XmlRootAttribute  root =, new  XmlRootAttribute (“setdetails");   ,,,,,,,,,,,root.Namespace =,名称空间;//带命名空间的操作   ,,,,,,,,,,,XmlSerializer  serializer =, new  XmlSerializer (typeof (T)、根);      ,,,,,,,,,,,StringReader  sr =, new  StringReader (xml);   ,,,,,,,,,,,obj =, (T) serializer.Deserialize (sr);   ,,,,,,,,,,,sr.Close ();   ,,,,,,,}   ,,,,,,,catch  (Exception 交货)   ,,,,,,,{   ,,,,,,,,,,,Console.WriteLine (ex.Message);   null   null   null   null   null   null   null   null   null

怎么在c#中解析XML