利用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