91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在C#中解析XML

發布時間:2021-04-30 14:55:10 來源:億速云 閱讀:272 作者: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

盈江县| 什邡市| 锦屏县| 逊克县| 龙南县| 胶州市| 庆安县| 甘孜县| 额尔古纳市| 博乐市| 鄂州市| 新疆| 平凉市| 中牟县| 叶城县| 浦城县| 陆河县| 平利县| 象山县| 秭归县| 岳普湖县| 依安县| 龙井市| 浮山县| 牙克石市| 芜湖市| 黑龙江省| 江山市| 乡宁县| 阳原县| 福泉市| 钦州市| 蛟河市| 霍城县| 江永县| 日照市| 苍南县| 贵定县| 手机| 远安县| 沙坪坝区|