XML的解析以及根据对应的路径保存

1.在工作中,由于临时需要使用Xml的解析以及导出,则根据网上结合自己情况写了一下。

下面是xml的数据,根据如下xml进行xml的读取以及相应的导出。

<?xml version="1.0" encoding="utf-8"?>
<FluorochromeGroups>
  <FluorochromeLibrayGroup Name="All" Description="1" IsDefault="true">
    <Fluorochromes>
      <FluorochromeLibrayItem Name="3" DisplayName="4" IsDefault="true">
        <InstrumentConfigs>
          <InstrumentConfig Instrument="A8" Optical="7">
            <VirtualFilters>
              <VirtualFilter FLChannelID="8" />
              <VirtualFilter FLChannelID="9" />
            </VirtualFilters>
          </InstrumentConfig>
          <InstrumentConfig Instrument="A9" Optical="11">
            <VirtualFilters>
              <VirtualFilter FLChannelID="12" />
              <VirtualFilter FLChannelID="13" />
            </VirtualFilters>
          </InstrumentConfig>
        </InstrumentConfigs>
      </FluorochromeLibrayItem>
    </Fluorochromes>
  </FluorochromeLibrayGroup>
</FluorochromeGroups>

接下去进行数据的导入,我这边仅针对我这个xml进行导入

   List<FluorochromeLibrayGroup> lstfluo = new List<FluorochromeLibrayGroup>();
        FluorochromeLibrayGroup fluorochrome = new FluorochromeLibrayGroup();
        FluorochromeLibrayItem fluorochromeLibrayItem = new FluorochromeLibrayItem();
        private string _curinstr = "";
        /// <summary>
        /// 解析FluorochromeLibrayGroup
        /// </summary>
        /// <param name="ElementArg"></param>
        public void GetFluorochromeLibrayGroup(XmlNode ElementArg)
        {
            foreach (XmlNode xn1 in ElementArg)
            {
                if (xn1.Name == "FluorochromeLibrayGroup")
                {
                    fluorochrome = new FluorochromeLibrayGroup();
                    fluorochrome.Name = ((XmlElement)xn1).GetAttribute("Name");
                    fluorochrome.Description = ((XmlElement)xn1).GetAttribute("Description");
                    fluorochrome.IsDefault = (((XmlElement)xn1).GetAttribute("IsDefault"));
                    GetFluorochromeLibrayGroup(xn1);
                    lstfluo.Add(fluorochrome);
                    continue;
                }
                if (xn1.Name == "FluorochromeLibrayItem")
                {
                    fluorochromeLibrayItem = new FluorochromeLibrayItem();
                    fluorochromeLibrayItem.Name = ((XmlElement)xn1).GetAttribute("Name");
                    fluorochromeLibrayItem.DisPlayName = ((XmlElement)xn1).GetAttribute("DisplayName");
                    fluorochromeLibrayItem.IsDefault = (((XmlElement)xn1).GetAttribute("IsDefault"));
                    GetFluorochromeLibrayItem(xn1);
                    fluorochrome.FluorochromeLibrayItems.Add(fluorochromeLibrayItem);

                }
                GetFluorochromeLibrayGroup(xn1);
            }
        }

        /// <summary>
        /// 解析FluorochromeLibrayItem
        /// </summary>
        /// <param name="ElementArg"></param>
        public void GetFluorochromeLibrayItem(XmlNode ElementArg)
        {
            foreach (XmlNode xn1 in ElementArg)
            {
                if (xn1.Name == "InstrumentConfig")
                {
                    _curinstr = ((XmlElement)xn1).GetAttribute("Instrument");
                }
                if (xn1.Name == "VirtualFilter")
                {
                    string fl = ((XmlElement)xn1).GetAttribute("FLChannelID");
                    if (fluorochromeLibrayItem.AllVirtualFilters.ContainsKey(_curinstr))
                    {
                        fluorochromeLibrayItem.AllVirtualFilters[_curinstr].Add(fl);
                    }
                    else
                    {
                        fluorochromeLibrayItem.AllVirtualFilters.Add(_curinstr, new List<string>() { fl });
                    }
                }
                GetFluorochromeLibrayItem(xn1);
            }
        }

        //解析xml
       public void GetXmlData2()
        {
            string xmlpath = @"C:\Users\VirtualFilter.xml";
            XmlDocument doc = new XmlDocument();
            doc.Load(xmlpath);//读取文件
            XmlElement root = null;
            root = doc.DocumentElement;
            XmlElement topList = doc.DocumentElement;//doc.DocumentElement.ChildNodes;
            GetFluorochromeLibrayGroup(topList);
        }

xml的导出

   public void XmlToTable()
        {
            XmlDocument xmlDoc = new XmlDocument();
            //创建类型声明节点  
            XmlNode node = xmlDoc.CreateXmlDeclaration("1.0", "utf-8", "");
            xmlDoc.AppendChild(node);

            //创建根节点  
            XmlNode root = xmlDoc.CreateElement("FluorochromeGroups");
            xmlDoc.AppendChild(root);
            for (int i = 0; i < lstfluo.Count; i++)
            {
                XmlNode node1 = xmlDoc.CreateNode(XmlNodeType.Element, "FluorochromeLibrayGroup", null);
                ((XmlElement)node1).SetAttribute("Name", lstfluo[i].Name);
                ((XmlElement)node1).SetAttribute("Description", lstfluo[i].Description);
                ((XmlElement)node1).SetAttribute("IsDefault", lstfluo[i].IsDefault);
                XmlNode node2 = xmlDoc.CreateNode(XmlNodeType.Element, "Fluorochromes", null);
                for (int j = 0; j < lstfluo[i].FluorochromeLibrayItems.Count; j++)
                {
                    XmlNode node3 = xmlDoc.CreateNode(XmlNodeType.Element, "FluorochromeLibrayItem", null);
                    ((XmlElement)node3).SetAttribute("Name", lstfluo[i].FluorochromeLibrayItems[j].Name);
                    ((XmlElement)node3).SetAttribute("DisplayName", lstfluo[i].FluorochromeLibrayItems[j].DisPlayName);
                    ((XmlElement)node3).SetAttribute("IsDefault", lstfluo[i].FluorochromeLibrayItems[j].IsDefault);
                    XmlNode node4 = xmlDoc.CreateNode(XmlNodeType.Element, "InstrumentConfigs", null);

                    foreach (string strkey in lstfluo[i].FluorochromeLibrayItems[j].AllVirtualFilters.Keys)
                    {
                        XmlNode node5 = xmlDoc.CreateNode(XmlNodeType.Element, "InstrumentConfig", null);
                        ((XmlElement)node5).SetAttribute("Instrument", strkey);
                        ((XmlElement)node5).SetAttribute("Optical", strkey);
                        XmlNode node6 = xmlDoc.CreateNode(XmlNodeType.Element, "VirtualFilters", null);
                        for (int k = 0; k < lstfluo[i].FluorochromeLibrayItems[j].AllVirtualFilters[strkey].Count; k++)
                        {
                            XmlNode node7 = xmlDoc.CreateNode(XmlNodeType.Element, "VirtualFilter", null);
                            ((XmlElement)node7).SetAttribute("FLChannelID", lstfluo[i].FluorochromeLibrayItems[j].AllVirtualFilters[strkey][k]);
                            node6.AppendChild(node7);
                        }
                        node5.AppendChild(node6);
                        node4.AppendChild(node5);
                    }
                    node3.AppendChild(node4);
                    node2.AppendChild(node3);
                }
                node1.AppendChild(node2);
                root.AppendChild(node1);
            }

            try
            {

                string filepath = @"C:\New folder";
                //if(File)
                SaveXmlToLocalhost(xmlDoc, filepath, "data11");
            }
            catch (Exception e)
            {
                //显示错误信息  
                Console.WriteLine(e.Message);
            }
        }

        private void CreateNode(XmlDocument xmlDoc, XmlNode parentNode, string name, string value)
        {
            XmlNode node = xmlDoc.CreateNode(XmlNodeType.Element, name, null);
            node.InnerText = value;
            parentNode.AppendChild(node);
        }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值