C#读取string类型的xml过滤注释内容

本文介绍了一个使用C#将XML数据绑定到TreeView控件的过程,并针对XML文件中包含注释时出现的问题提供了解决方案。通过设置XmlReader忽略注释,避免了在加载过程中引发错误。

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

利用XmlDocument绑定TreeView时,如果xml内容中包含注释,则注释也会被作为一个节点,此时会报错。

测试xml片段,保存在result。

<?xml version="1.0" encoding="utf-8" ?>
<root  text="类别" value="类别">
  
  <!-- 这是性别的选择项-->
	<sex text="性别" value="性别">
		<add text="男" value="男"></add>
		<add text="女" value="女"></add>
	</sex>

	<!-- 这是民族的选择项-->
	<nation  text="民族" value="名族">
		<add text="汉族" value="汉族"></add>
		<add text="满族" value="满族"></add>
	</nation>
</root>

c#部分代码

#region
private void AddTreeView(string result)
        {
            XmlDocument xmldoc;
            //XmlNode root; //xmlNode,
            xmldoc = new XmlDocument();
            try
            {
                
                XmlReader reader = new XmlTextReader(new StringReader(result));
                XmlReaderSettings settings = new XmlReaderSettings();
                settings.IgnoreComments = true;
                XmlReader xmlreader = XmlReader.Create(reader, settings);
                xmldoc.Load(xmlreader);
                treeView1.BeginUpdate();
                //XmlElement xe = (XmlElement)xmldoc.SelectSingleNode("root");
                XmlElement xe = xmldoc.DocumentElement;

                TreeNode root = new TreeNode();

                root.Name = xe.GetAttribute("text");
                root.Text = xe.GetAttribute("value");
                root = GetChildNodes(xe, root);
                treeView1.Nodes.Add(root);
                treeView1.EndUpdate();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message); 
            }
        }
        private TreeNode GetChildNodes(XmlElement xe, TreeNode upNode)
        { 
           if(xe.HasChildNodes)
          {
                foreach (XmlNode node in xe.ChildNodes)
                { 
                    XmlElement xlt = (XmlElement)node;
                    TreeNode tn = new TreeNode();
                    tn.Text = xlt.GetAttribute("text");
                    tn.Name = xlt.GetAttribute("value");
                    GetChildNodes(xlt,tn);

                    upNode.Nodes.Add(tn);
                }
           }
           return upNode;
        }
#endregion





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值