【C#】NXOpen将树列表内数据写入XML文件

本文介绍了一种面向过程的XML文件操作方法,但建议在C#中使用序列化来更高效地处理XML文件。提供的代码示例展示了如何加载XML文件,清空并重新创建节点,然后写入新的数据。这种方法虽然可行,但序列化通常提供更好的性能和可维护性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下面方法为面向过程的方式,在C#中应该优先使用序列化的方式操作XML文件

1. 当前方式为加载对应的XML文件,清空指定节点下的XmlElement,然后再重新创建XmlElement,并设置属性。

目标文件
<?xml version="1.0"?>
<Root WorkLayer="1">
  <PartCategory Name="Category1" LocalName="类别1" Layer="2~5" Ico="" Remarks="" Sensibility="0" />
  <PartCategory Name="Category2" LocalName="类别2" Layer="15" Ico="" Remarks="" Sensibility="0" />
  <PartCategory Name="Category3" LocalName="类别3" Layer="20" Ico="" Remarks="" Sensibility="0" />
  <PartCategory Name="Category4" LocalName="类别4" Layer="30~50" Ico="" Remarks="" Sensibility="0" />
</Root>
写入XML文件代码
        /// <summary>
        /// 获取树列表内所有节点
        /// </summary>
        /// <returns></returns>
        private List<Node> SelectAllNodes()
        {
            List<Node> nodes=new List<Node>();
            var node = tree_control0.RootNode;
            while (node!=null)
            {
                nodes.Add(node);
                node = node.NextNode;
            }
            return nodes;
        }

        /// <summary>
        /// 写入数据到XML文件
        /// </summary>
        /// <param name="nodes">树列表的List<nodes></param>
        public void WriteXMLFile(List<Node> nodes)
        {
            XmlDocument xmldoc = new XmlDocument();
            string path = AskTemplateDir();
            xmldoc.Load(path);
            if (xmldoc.DocumentElement != null) xmldoc.DocumentElement.InnerText = null;//忽略注释
            XmlNode root = xmldoc.SelectSingleNode("Root");
            root.InnerText = null;//清除节点内的所有数据
            foreach (var node in nodes)
            {
                string name01 = node.GetColumnDisplayText(name);
                string localName01 = node.GetColumnDisplayText(localName);
                string layer01 = node.GetColumnDisplayText(layer);
                XmlElement holeElement = xmldoc.CreateElement("PartCategory");//创建一个<DrillSizeHole/>节点
                holeElement.SetAttribute("Name", name01);
                holeElement.SetAttribute("LocalName", localName01);
                holeElement.SetAttribute("Layer", layer01);
                holeElement.SetAttribute("Ico", "");
                holeElement.SetAttribute("Remarks", "");
                holeElement.SetAttribute("Sensibility", "0");
                root.AppendChild(holeElement);//将节点<DrillSizeHole/>写入<Root>根节点
            }
            xmldoc.Save(path);
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值