C# XML文件操作之相機參數(shù)保存和讀取
1. XML基礎(chǔ)
XML是可擴展標(biāo)記語言(Extensible Markup Language,XML)是一種數(shù)據(jù)語言,它將數(shù)據(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. 相機參數(shù)保存和讀取
創(chuàng)建一個相機參數(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)建相機XML文件
/// </summary>
/// <param name="xmlFilePath">存儲路徑</param>
/// <param name="cameraList">相機列表</param>
public static void GenerateCameraXMLFile(string xmlFilePath, List<Camera> cameraList)
{
try
{
//初始化一個xml實例
XmlDocument myXmlDoc = new XmlDocument();
//創(chuàng)建xml的根節(jié)點
XmlElement rootElement = myXmlDoc.CreateElement("Cameras");
//將根節(jié)點加入到xml文件中(AppendChild)
myXmlDoc.AppendChild(rootElement);
foreach (var item in cameraList)
{
//初始化第一層的第一個子節(jié)點
XmlElement firstLevelElement1 = myXmlDoc.CreateElement("Camera");
//填充第一層的第一個子節(jié)點的屬性值(SetAttribute)
firstLevelElement1.SetAttribute("ID", item.camID);
//將第一層的第一個子節(jié)點加入到根節(jié)點下
rootElement.AppendChild(firstLevelElement1);
//初始化第二層的第一個子節(jié)點
XmlElement secondLevelElement11 = myXmlDoc.CreateElement("Exposure");
//填充第二層的第一個子節(jié)點的值(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實例
XmlDocument myXmlDoc = new XmlDocument();
//加載xml文件(參數(shù)為xml文件的路徑)
myXmlDoc.Load(xmlFilePath);
//獲得第一個匹配的節(jié)點(SelectSingleNode):此xml文件的根節(jié)點
XmlNode rootNode = myXmlDoc.SelectSingleNode("Cameras");
//分別獲得該節(jié)點的InnerXml和OuterXml信息
string innerXmlInfo = rootNode.InnerXml.ToString();
string outerXmlInfo = rootNode.OuterXml.ToString();
//獲得該節(jié)點的子節(jié)點(即:該節(jié)點的第一層子節(jié)點)
XmlNodeList firstLevelNodeList = rootNode.ChildNodes;
try
{
foreach (XmlNode node in firstLevelNodeList)
{
Camera camera = new Camera();
//獲得該節(jié)點的屬性集合
XmlAttributeCollection attributeCol = node.Attributes;
foreach (XmlAttribute attri in attributeCol)
{
//獲取屬性名稱與屬性值
string name = attri.Name;
string value = attri.Value;
camera.camID = value;//相機ID
}
//判斷此節(jié)點是否還有子節(jié)點
if (node.HasChildNodes)
{
//獲取該節(jié)點的第一個子節(jié)點
XmlNode secondLevelNode1 = node.FirstChild;
//獲取該節(jié)點的名字
string name = secondLevelNode1.Name;
//獲取該節(jié)點的值(即:InnerText)
string innerText = secondLevelNode1.InnerText;
camera.camExposure = Convert.ToInt16(innerText);//相機曝光
//獲取該節(jié)點的第二個子節(jié)點(用數(shù)組下標(biāo)獲取)
XmlNode secondLevelNode2 = node.ChildNodes[1];
name = secondLevelNode2.Name;
innerText = secondLevelNode2.InnerText;
camera.camGain = Convert.ToInt16(innerText);//相機增益
}
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文件操作之相機參數(shù)保存和讀取的文章就介紹到這了,更多相關(guān)C#相機參數(shù)保存 讀取內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
深入淺析c#靜態(tài)多態(tài)性與動態(tài)多態(tài)性
多態(tài)就是多種形態(tài),也就是對不同對象發(fā)送同一個消息,不同對象會做出不同的響應(yīng)。這篇文章主要介紹了c#靜態(tài)多態(tài)性與動態(tài)多態(tài)性的相關(guān)知識,需要的朋友可以參考下2018-09-09
C#實現(xiàn)凍結(jié)Excel窗口以鎖定行列或解除凍結(jié)
在處理大型Excel工作簿時,有時候我們需要在工作表中凍結(jié)窗格,這樣可以在滾動查看數(shù)據(jù)的同時保持某些行或列固定不動,下面我們就來看看如何使用C#實現(xiàn)凍結(jié)Excel窗口吧2024-04-04
Unity3D使用鼠標(biāo)旋轉(zhuǎn)縮放平移視角
這篇文章主要為大家詳細介紹了Unity3D使用鼠標(biāo)旋轉(zhuǎn)縮放平移視角,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-07-07
c#?理解csredis庫實現(xiàn)分布式鎖的詳細流程
這篇文章主要介紹了c#?理解csredis實現(xiàn)分布式鎖,該庫本身已經(jīng)足夠完善,這里我畫蛇添足一下,為了方便自己的使用,本文通過實例代碼給大家詳細介紹,需要的朋友可以參考下2022-02-02

