C#解析xml文超详细讲解

    技术2022-07-12  83

    用C#对已有的xml文件进行解析,并将获得的数据按照自己的需求进行保存方便右后调用 以如下的xml文件为例 笔者的xml文件后续还有很多节点信息,出于保密这里只是部分截取 对于如上的xml文件,这里采用XmlDocument的方式,共有三种方式,可自行百度。 首先创建一个类用来保存读取的信息 在保存信息时,可以采取多种方式,数组,list容器,结构体 class Project { public string projectName = “empty”; public string modelFormat = “empty”; public string modelPath = “empty”; public string worker = “empty”; public string date = “empty”; public string simulationType = “Structural”; public string name = “empty”; public struct Struct_Post {

    public string struct_name; public string postId; public string result_type; public void reset() { struct_name = "Post Deal Infomation"; postId = "No paras"; result_type = "No paras"; //geoInfo.reset(); } }; public struct Struct_NameSels { public string nameSel_name; public void reset() { nameSel_name = "No paras"; } }; public Struct_Post post_struct;//保存后处理信息 public List<Struct_NameSels> NameSelectionInfos; }

    在依据需求创建好类后开始读取xml文件并保存 class Prepare:Project { //public List projectList = new List(); public override bool Initial(string xmlPath) { string str1 = System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName; XmlDocument Document = new XmlDocument(); XmlReaderSettings settings = new XmlReaderSettings(); settings.IgnoreComments = true;//忽略文档里面的注释

    try { //xml文件路径 XmlReader reader = XmlReader.Create(xmlPath, settings); Document.Load(reader); } catch (System.Exception ex) { //MessageBox.Show("读取文件失败!"); MessageBox.Show(ex.Message); } //得到根节点Project XmlNode XnPj = Document.SelectSingleNode("Project"); //得到根节点的所有子节点 if (XnPj != null) { XmlElement pj = (XmlElement)XnPj; //获得根节点的属性值 projectName = pj.GetAttribute("prjName").ToString(); worker = pj.GetAttribute("worker").ToString(); date = pj.GetAttribute("date").ToString(); simulationType = pj.GetAttribute("simulationType").ToString(); //projectList.Add(projectInfomation); //得到project 的所有子节点 XmlNodeList XnPjChild = XnPj.ChildNodes; for (int a = 0; a < XnPjChild.Count; a++) { string pointname1 = XnPjChild.Item(a).Name; if (pointname1 == "Workbench") { //得到workbench的所有子节点 XmlNodeList Xnwb = XnPjChild.Item(a).ChildNodes; for (int b = 0; b < Xnwb.Count; b++) { string pointname2 = Xnwb.Item(b).Name; if (pointname2 == "Model") { //获得model的属性 name = ((XmlElement)Xnwb.Item(b)).GetAttribute("name").ToString(); //得到model的所有子节点 XmlNodeList XnMd = Xnwb.Item(b).ChildNodes; for (int c = 0; c < XnMd.Count; c++) { string pointname3 = XnMd.Item(c).Name; if (pointname3 == "ModelFormat") { //获得modelFormat的属性 modelFormat = XnMd.Item(c).InnerText; } if (pointname3 == "ModelPath") { //获得modelPath的属性 modelPath = XnMd.Item(c).InnerText; } } } if (pointname2 == "Material") { XmlNodeList XnMatr = Xnwb.Item(b).ChildNodes; for (int c = 0; c < XnMatr.Count; c++) { string pointname3 = XnMatr.Item(c).Name; if (pointname3 == "MaterailXmlPath") { //获得MaterailXmlPath的属性值 materialInfoPath = XnMatr.Item(c).InnerText; } } } } } { //后续内容已省略.......... } }

    总结 对于解析xml文件,有如下总结, 首先确定读取的信息,声明变量用以保存,其次在读取xml文件时要很清楚的搞清楚根节点和子节点(相对而言),按行读取,遇到根节点,则获得根节点的子节点, 例如: XmlNode XnPj = Document.SelectSingleNode(“Project”);若根节点包含属性值或者内容则按不同的方式获取, 获取属性值:XmlElement pj = (XmlElement)XnPj; //获得根节点的属性值 projectName = pj.GetAttribute(“prjName”).ToString(); //获得modelFormat的内容 modelFormat = XnMd.Item©.InnerText; 最后并且遍历子节点,若子节点又包含子节点,则重复之前步骤…依次按行读取直到最终完成。

    Processed: 0.010, SQL: 10