怎么在C#中解析XML

发布时间:2021-04-30 14:55:10 作者:Leah
来源:亿速云 阅读:269

怎么在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>

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

具体实现代码:

//读取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问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。

推荐阅读:
  1. 解析XML
  2. 怎么在js中解析xml文件

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

xml

上一篇:C++ 中继承的原理是什么

下一篇:if在数据库mysql存储中怎么判断

相关阅读

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

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