C#解析xml文超详细讲解

用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;
最后并且遍历子节点,若子节点又包含子节点,则重复之前步骤…依次按行读取直到最终完成。

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值