温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么在C#中解析XML

发布时间:2021-04-30 14:55:10 来源:亿速云 阅读:306 作者:Leah 栏目:开发技术

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

<?xml version="1.0" encoding="UTF-8"?> <messages xmlns="http://www.test.com/hit/rhin" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.test.com/hit/rhin file:///e:/request_message.xsd">     <heartbeat/>     <switchset></switchset>     <business>         <datasets>             <setdetails>                 <WS02_01>内容</WS02_01>             </setdetails>             <setdetails>                 <WS02_01>内容</WS02_01>             </setdetails>         </datasets>     </business> </messages>
  • xmlns 是默认的命名空间,在有命名空间情况下,需要使用XmlNamespaceManager进行处理。

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

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

  • xsi:schemaLocation 是一个由空格分开的键值对,前一个 键 www.test.com/hit/rhin 是命名空间, 是一个全局唯一字符串。后一个 值 是XSD location URI , 这个值指示了前一个命名空间所对应的 XSD 文件的位置, xml parser 可以利用这个信息获取到 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是随意的一个命名          //读取数据节点,需要带上命名空间m     XmlNodeList dataNodeList = xml.SelectNodes("d:messages/d:business/d:datasets/d:setdetails", m);     if (dataNodeList != null && dataNodeList.Count > 0)     {         for (int i = 0; i < dataNodeList.Count; i++)         {             var model =  XmlToEntity<TestModel>(dataNodeList[i].OuterXml,"http://www.test.com/hit/rhin");         }                 }

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

privated T XmlToEntity<T>(string xml, string nameSpace)     {         T obj = default(T);         try         {             XmlRootAttribute root = new XmlRootAttribute("setdetails");             root.Namespace = nameSpace;//带命名空间的操作             XmlSerializer serializer = new XmlSerializer(typeof(T),root);             StringReader sr = new StringReader(xml);             obj = (T)serializer.Deserialize(sr);             sr.Close();         }         catch (Exception ex)         {             Console.WriteLine(ex.Message);         }         return obj;     }

实体定义也需要说明命名空间

[XmlRoot(Namespace = "http://www.test.com/hit/rhin", IsNullable = false, ElementName = "setdetails")]     [Table("TAB_TEST")]     public class TestModel     {         [XmlElement("WS02_01")]         public string  NEIRONG { get; set; }     }

关于怎么在C#中解析XML问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

xml
AI