欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2021年04月30日 08:27:19   作者:慌鼠  
這篇文章主要介紹了C# 解析XML和反序列化的示例,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下

本次為了記錄開發(fā)一個基于webservice接口,去解析對方傳送過來的xml字符串。實際使用時遇到的一些問題。

傳輸過來的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>內(nèi)容</WS02_01>
            </setdetails>
            <setdetails>
                <WS02_01>內(nèi)容</WS02_01>
            </setdetails>
        </datasets>
    </business>
</messages>
  • xmlns 是默認的命名空間,在有命名空間情況下,需要使用XmlNamespaceManager進行處理。
  • xmlns:xsi 定義了一個命名空間前綴 xsi 對應(yīng)的唯一字符串 www.w3.org/2001/XMLSch… ,而且這個 xmlns:xsi 在不同的 xml 文檔中似乎都會出現(xiàn)。 這是因為 xsi 已經(jīng)成為了一個業(yè)界默認的用于 XSD(XML Schema Definition) 文件的命名空間。 而 XSD 文件(也常常稱為 Schema 文件)是用來定義 xml 文檔結(jié)構(gòu)的。

XML 解析器可以根據(jù) 一個 XSD 文件的內(nèi)容來解析另一個 XML 文件, 判斷該文件的結(jié)構(gòu) 是否和 XSD 文件中定義的一致。 XSD 文件 可以理解為 XML 文檔可以自定義的語法或格式檢查器。

  • xsi:schemaLocation 是一個由空格分開的鍵值對,前一個 鍵 www.test.com/hit/rhin 是命名空間, 是一個全局唯一字符串。后一個 值 是XSD location URI , 這個值指示了前一個命名空間所對應(yīng)的 XSD 文件的位置, xml parser 可以利用這個信息獲取到 XSD 文件, 從而通過 XSD 文件對所有屬于 命名空間 www.test.com/hit/rhin 的元素結(jié)構(gòu)進行校驗, 因此這個值必然是可以訪問的, 且訪問到的內(nèi)容是一個 XSD 文件的內(nèi)容

具體實現(xiàn)代碼:

    //讀取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是隨意的一個命名
    
    //讀取數(shù)據(jù)節(jié)點,需要帶上命名空間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和反序列化的示例的詳細內(nèi)容,更多關(guān)于C# 解析XML和反序列化的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 利用C#實現(xiàn)最基本的小說爬蟲示例代碼

    利用C#實現(xiàn)最基本的小說爬蟲示例代碼

    最近在學(xué)習(xí)c#,碰巧遇到個小說站不錯,就索性當(dāng)個練習(xí),所以這篇文章主要給大家介紹了關(guān)于利用C#實現(xiàn)最基本的小說爬蟲的相關(guān)資料,文中給出了詳細的示例代碼供大家參考學(xué)習(xí),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-10-10
  • 解決C#全屏幕截圖的實現(xiàn)方法

    解決C#全屏幕截圖的實現(xiàn)方法

    本篇文章是對在C#中實現(xiàn)全屏幕截圖的方法進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • C#實現(xiàn)動態(tài)生成表格的方法

    C#實現(xiàn)動態(tài)生成表格的方法

    這篇文章主要介紹了C#實現(xiàn)動態(tài)生成表格的方法,是C#程序設(shè)計中非常實用的技巧,需要的朋友可以參考下
    2014-09-09
  • C#基礎(chǔ)概念二十五問 21-25

    C#基礎(chǔ)概念二十五問 21-25

    C#基礎(chǔ)概念二十五問 21-25...
    2007-04-04
  • 適合初學(xué)者開發(fā)的C#在線英漢詞典小程序

    適合初學(xué)者開發(fā)的C#在線英漢詞典小程序

    這篇文章主要為大家詳細介紹了適合初學(xué)者開發(fā)的C#在線英漢詞典小程序,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • 利用C#代碼將html樣式文件與Word文檔互換的方法

    利用C#代碼將html樣式文件與Word文檔互換的方法

    這篇文章主要給大家介紹了關(guān)于利用C#代碼將html樣式文件與Word文檔互換的方法,文中通過示例代碼將兩種轉(zhuǎn)換介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-11-11
  • WinForm ToolTip使用方法小結(jié)

    WinForm ToolTip使用方法小結(jié)

    這篇文章主要介紹了WinForm ToolTip使用方法小結(jié),對C#初學(xué)者有一定的借鑒參考價值,需要的朋友可以參考下
    2014-08-08
  • C#?wpf實現(xiàn)截屏框熱鍵截屏的示例代碼

    C#?wpf實現(xiàn)截屏框熱鍵截屏的示例代碼

    這篇文章主要為大家詳細介紹了C#?wpf實現(xiàn)截屏框熱鍵截屏的相關(guān)知識,文中的示例代碼講解詳細,具有一定的借鑒價值,有需要的小伙伴可以學(xué)習(xí)一下
    2023-09-09
  • C#中Property和Attribute的區(qū)別實例詳解

    C#中Property和Attribute的區(qū)別實例詳解

    這篇文章主要介紹了C#中Property和Attribute的區(qū)別,較為詳細的分析了C#中Property和Attribute的功能、定義、區(qū)別及使用時的相關(guān)注意事項,需要的朋友可以參考下
    2015-06-06
  • C#計算代碼執(zhí)行時間的方法

    C#計算代碼執(zhí)行時間的方法

    在一些測試工作時我們需要獲得高精度的代碼執(zhí)行時間以比較其效率。
    2013-03-03

最新評論