我正在加载一个XML文件并将其显示为树视图。我想让用户看看每个元素都有哪些子元素。有没有办法这样做? 我遇到了与节点匹配的麻烦(树节点与'原始'节点)。我按名称对它们进行了比较,但我并不总是得到正确的结果。 这就是我到目前为止所做的:
xmlFile = new XmlDocument();
xmlFile.Load(dialog.FileName);
treeView1.Nodes.Clear();
treeView1.Nodes.Add(new TreeNode(xmlFile.DocumentElement.Name));
TreeNode tNode = new TreeNode();
tNode = treeView1.Nodes[0];
AddNode(xmlFile.DocumentElement, tNode);
treeView1.ExpandAll();
添加节点
public void AddNode(XmlNode xmlNode, TreeNode treeNodes)
{ XmlNode xNode;
TreeNode tNode;
XmlNodeList nodeList;
int i;
if (xmlNode.HasChildNodes)
{nodeList = xmlNode.ChildNodes;
for (i = 0; i <= nodeList.Count - 1; i++)
{xNode = xmlNode.ChildNodes[i];
treeNodes.Nodes.Add(new TreeNode(xNode.Name));
tNode = treeNodes.Nodes[i];
AddNode(xNode, tNode);}}
else
{ treeNodes.Text = (xmlNode.OuterXml).Trim();}}
在树节点上单击
private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e){
List<string> temp = new List<string>();
this.lbElements.Items.Clear(););
foreach (XmlNode node in xmlFile.DocumentElement.ChildNodes)
{
if (node.Name == e.Node.Name)
{
foreach (string s in fh.getChildNodes(node)) temp.Add(s);
if (!temp.Contains(s))
temp.Add(s);
foreach (string s in temp) this.lbElements.Items.Add(s);
答案 0 :(得分:0)
尝试使用if (node.Name == e.Node.Text && node.NodeType == XmlNodeType.Element)
在treeview_NodeMouseClick()中。
答案 1 :(得分:0)
最简单的方法是使用XmlReader并遍历内容。 我试过这种方式。
&GT;
private void treeView1_NodeMouseClick_1(object sender,
> TreeNodeMouseClickEventArgs e)
> {
> XmlReader reader = null;
> reader = XmlReader.Create(filePath);
> {
> reader.MoveToContent();
> // Parse the file and display each of the nodes.
> while (reader.Read())
> {
> switch (reader.NodeType)
> {
> case XmlNodeType.Element:
> if (reader.LocalName == "to")
> {
>
> }
> break;
>
> case XmlNodeType.Text:
> if(reader.Value == "Jane")
> {
>
> }
> break;
> }
> }
> }
> }
Xml file used is:
<note>
<to>Tove</to>
<from>Jane</from>
<heading>Reminder</heading>
<body>Weekend</body>
</note>