C# XML文件操作之相機(jī)參數(shù)保存和讀取
1. XML基礎(chǔ)
XML是可擴(kuò)展標(biāo)記語言(Extensible Markup Language,XML)是一種數(shù)據(jù)語言,它將數(shù)據(jù)以一種簡單的文本格式存儲,可以被人類和幾乎任何計(jì)算機(jī)理解。Microsoft在.Net Framework和其他微軟產(chǎn)品中已經(jīng)完全采用它。
XML的基本格式:
<book> <title>Beginning Visual C# 7</title> <author>Benjamin Perkins et al</author> <code>458685</code> </book>
2. XML基本操作
3. 相機(jī)參數(shù)保存和讀取
創(chuàng)建一個相機(jī)參數(shù)XML文件保存和讀取的類CameraXML
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Xml; namespace xmlTest { class Camera { public string camID; public int camExposure; public int camGain; public Camera() { camID = "nullID"; camExposure = 5000; camGain = 0; } public Camera(string camID, int camExposure, int camGain) { this.camID = camID; this.camExposure = camExposure; this.camGain = camGain; } } class CameraXML { /// <summary> /// 創(chuàng)建相機(jī)XML文件 /// </summary> /// <param name="xmlFilePath">存儲路徑</param> /// <param name="cameraList">相機(jī)列表</param> public static void GenerateCameraXMLFile(string xmlFilePath, List<Camera> cameraList) { try { //初始化一個xml實(shí)例 XmlDocument myXmlDoc = new XmlDocument(); //創(chuàng)建xml的根節(jié)點(diǎn) XmlElement rootElement = myXmlDoc.CreateElement("Cameras"); //將根節(jié)點(diǎn)加入到xml文件中(AppendChild) myXmlDoc.AppendChild(rootElement); foreach (var item in cameraList) { //初始化第一層的第一個子節(jié)點(diǎn) XmlElement firstLevelElement1 = myXmlDoc.CreateElement("Camera"); //填充第一層的第一個子節(jié)點(diǎn)的屬性值(SetAttribute) firstLevelElement1.SetAttribute("ID", item.camID); //將第一層的第一個子節(jié)點(diǎn)加入到根節(jié)點(diǎn)下 rootElement.AppendChild(firstLevelElement1); //初始化第二層的第一個子節(jié)點(diǎn) XmlElement secondLevelElement11 = myXmlDoc.CreateElement("Exposure"); //填充第二層的第一個子節(jié)點(diǎn)的值(InnerText) secondLevelElement11.InnerText = item.camExposure.ToString(); firstLevelElement1.AppendChild(secondLevelElement11); XmlElement secondLevelElement12 = myXmlDoc.CreateElement("Gain"); secondLevelElement12.InnerText = item.camGain.ToString(); firstLevelElement1.AppendChild(secondLevelElement12); } //將xml文件保存到指定的路徑下 myXmlDoc.Save(xmlFilePath); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } } public static void ReadCameraXMLFile(string xmlFilePath, out List<Camera> cameraList) { cameraList = new List<Camera>(); //初始化一個xml實(shí)例 XmlDocument myXmlDoc = new XmlDocument(); //加載xml文件(參數(shù)為xml文件的路徑) myXmlDoc.Load(xmlFilePath); //獲得第一個匹配的節(jié)點(diǎn)(SelectSingleNode):此xml文件的根節(jié)點(diǎn) XmlNode rootNode = myXmlDoc.SelectSingleNode("Cameras"); //分別獲得該節(jié)點(diǎn)的InnerXml和OuterXml信息 string innerXmlInfo = rootNode.InnerXml.ToString(); string outerXmlInfo = rootNode.OuterXml.ToString(); //獲得該節(jié)點(diǎn)的子節(jié)點(diǎn)(即:該節(jié)點(diǎn)的第一層子節(jié)點(diǎn)) XmlNodeList firstLevelNodeList = rootNode.ChildNodes; try { foreach (XmlNode node in firstLevelNodeList) { Camera camera = new Camera(); //獲得該節(jié)點(diǎn)的屬性集合 XmlAttributeCollection attributeCol = node.Attributes; foreach (XmlAttribute attri in attributeCol) { //獲取屬性名稱與屬性值 string name = attri.Name; string value = attri.Value; camera.camID = value;//相機(jī)ID } //判斷此節(jié)點(diǎn)是否還有子節(jié)點(diǎn) if (node.HasChildNodes) { //獲取該節(jié)點(diǎn)的第一個子節(jié)點(diǎn) XmlNode secondLevelNode1 = node.FirstChild; //獲取該節(jié)點(diǎn)的名字 string name = secondLevelNode1.Name; //獲取該節(jié)點(diǎn)的值(即:InnerText) string innerText = secondLevelNode1.InnerText; camera.camExposure = Convert.ToInt16(innerText);//相機(jī)曝光 //獲取該節(jié)點(diǎn)的第二個子節(jié)點(diǎn)(用數(shù)組下標(biāo)獲?。? XmlNode secondLevelNode2 = node.ChildNodes[1]; name = secondLevelNode2.Name; innerText = secondLevelNode2.InnerText; camera.camGain = Convert.ToInt16(innerText);//相機(jī)增益 } cameraList.Add(camera); } } catch (Exception ex) { Console.WriteLine(ex.ToString()); } } } }
在winform中使用這個類
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Xml;//引入命名空間 namespace xmlTest { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void buttonGenerateCameraXMLFile_Click(object sender, EventArgs e) { List<Camera> cameraList = new List<Camera>(); Camera camera; camera = new Camera("L102314123", 4500, 0); cameraList.Add(camera); camera = new Camera("L102314124", 5500, 0); cameraList.Add(camera); camera = new Camera("L102314125", 3500, 1); cameraList.Add(camera); camera = new Camera("L102314126", 6500, 0); cameraList.Add(camera); camera = new Camera("L102314127", 4880, 0); cameraList.Add(camera); camera = new Camera("L102314128", 9500, 0); cameraList.Add(camera); camera = new Camera("L102314129", 4530, 0); cameraList.Add(camera); camera = new Camera("L102314130", 13200, 0); cameraList.Add(camera); CameraXML.GenerateCameraXMLFile("D:\\Cameras.xml", cameraList); } private void buttonReadCameraXMLFile_Click(object sender, EventArgs e) { List<Camera> cameraList = new List<Camera>(); CameraXML.ReadCameraXMLFile("D:\\Cameras.xml", out cameraList); foreach (var item in cameraList) { listBox1.Items.Add("ID:" + item.camID); listBox1.Items.Add("Exposure:" + item.camExposure); listBox1.Items.Add("Gain:" + item.camGain); } } } }
到此這篇關(guān)于C# XML文件操作之相機(jī)參數(shù)保存和讀取的文章就介紹到這了,更多相關(guān)C#相機(jī)參數(shù)保存 讀取內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Avalonia封裝實(shí)現(xiàn)指定組件允許拖動的工具類
這篇文章主要為大家詳細(xì)介紹了Avalonia如何封裝實(shí)現(xiàn)指定組件允許拖動的工具類,文中的示例代碼講解詳細(xì),感興趣的小伙伴快跟隨小編一起來學(xué)習(xí)學(xué)習(xí)吧2023-03-03c#數(shù)據(jù)綁定之?dāng)?shù)據(jù)轉(zhuǎn)化為信息的示例
這篇文章主要介紹了c#數(shù)據(jù)綁定中的數(shù)據(jù)轉(zhuǎn)化為信息的示例,需要的朋友可以參考下2014-04-04c#調(diào)用c++的DLL的實(shí)現(xiàn)方法
本文主要介紹了c#調(diào)用c++的DLL的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05C# Winform下載文件并顯示進(jìn)度條的實(shí)現(xiàn)代碼
本來是要研究怎樣判斷下載完成,結(jié)果找到這個方法,可以在這個方法完成之后提示下載完成,需要的朋友可以參考下2014-07-07visio二次開發(fā)--判斷文檔是否已發(fā)生變化(變化就加星號*)
最近做一個故障樹診斷的項(xiàng)目,用visio二次開發(fā),可以同時打開多個繪制的故障樹圖形文檔。項(xiàng)目中需要實(shí)現(xiàn)判斷文檔是否發(fā)生變化,這是很多編輯軟件的基本功能,變化了就加個星號*2013-04-04C# Winform使用log4net進(jìn)行日志記錄
Log4Net是從Java的log4j移植過來的,功能也與log4j類似,可以把日志信息輸出到文件、數(shù)據(jù)庫等不同的介質(zhì)或目標(biāo),下面我們就來學(xué)習(xí)一下如何使用log4net進(jìn)行日志記錄吧2023-11-11