服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - C# 解析XML和反序列化的示例

C# 解析XML和反序列化的示例

2022-11-16 15:05慌鼠 C#

这篇文章主要介绍了C# 解析XML和反序列化的示例,帮助大家更好的理解和学习使用c#,感兴趣的朋友可以了解下

本次为了记录开发一个基于webservice接口,去解析对方传送过来的xml字符串。实际使用时遇到的一些问题。

传输过来的xml格式大致如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?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 文件的内容

具体实现代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//读取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实体上。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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;
}

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

?
1
2
3
4
5
6
7
[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和反序列化的示例的详细内容,更多关于C# 解析XML和反序列化的资料请关注服务器之家其它相关文章!

原文链接:https://juejin.cn/post/6956445778579554311

延伸 · 阅读

精彩推荐
  • C#C#中委托(Delegates)的使用方法详解

    C#中委托(Delegates)的使用方法详解

    这篇文章主要为大家详细介绍了C#中委托(Delegates)的使用方法,感兴趣的朋友可以参考一下...

    C#教程网8662021-11-25
  • C#c# SqlDataAdapter中的Fill是怎么实现的

    c# SqlDataAdapter中的Fill是怎么实现的

    这篇文章主要介绍了c# SqlDataAdapter中的Fill是怎么实现的,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下...

    一线码农4392022-09-28
  • C#Unity制作图片字体的方法

    Unity制作图片字体的方法

    这篇文章主要为大家详细介绍了Unity制作图片字体的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    422251853302022-10-25
  • C#C# 利用IRawPixels接口遍历栅格数据

    C# 利用IRawPixels接口遍历栅格数据

    本文主要介绍了利用IRawPixels接口遍历栅格数据。具有很好的参考价值,下面跟着小编一起来看下吧...

    杰桀9062021-12-23
  • C#如何在C#中使用Dapper ORM

    如何在C#中使用Dapper ORM

    这篇文章主要介绍了如何在C#中使用Dapper ORM,帮助大家更好的理解和学习使用c#,感兴趣的朋友可以了解下 ...

    一线码农5212022-11-09
  • C#Unity Shader实现水波纹效果

    Unity Shader实现水波纹效果

    这篇文章主要为大家详细介绍了Unity Shader实现水波纹效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    贪玩的孩纸时代6182022-09-06
  • C#c# 配置文件App.config操作类库的方法

    c# 配置文件App.config操作类库的方法

    下面小编就为大家带来一篇c# 配置文件App.config操作类库的方法。小编觉的挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    C#教程网3982021-12-11
  • C#C# WPF 通过委托实现多窗口间的传值的方法

    C# WPF 通过委托实现多窗口间的传值的方法

    这篇文章主要介绍了C# WPF 通过委托实现多窗口间的传值的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    hello黄先森6342022-02-28