C# 使用XSD进行C-XML验证-在Listbox和Treeview中显示结果

C# 使用XSD进行C-XML验证-在Listbox和Treeview中显示结果,c#,xml,validation,listbox,treeview,C#,Xml,Validation,Listbox,Treeview,大家好 我有以下用例: 我的Winform应用程序正在根据XSD验证特定的XML,并在列表框中显示错误(如果有),这一切正常。除此之外,我还将经过验证的XML加载到树视图中 现在,我想要实现的是让用户能够双击列表框中的错误,然后让树视图选择导致错误的相关元素 事实上,我有点受不了了。我现在输入了错误的行号,但无法使用行号在树视图中选择相关节点 有人知道我怎样才能做到这一点吗 非常感谢您的任何提示: 问候 更新: 填充树视图的代码: doc.Load(XMLDocPath); XmlNodeT

大家好

我有以下用例:

我的Winform应用程序正在根据XSD验证特定的XML,并在列表框中显示错误(如果有),这一切正常。除此之外,我还将经过验证的XML加载到树视图中

现在,我想要实现的是让用户能够双击列表框中的错误,然后让树视图选择导致错误的相关元素

事实上,我有点受不了了。我现在输入了错误的行号,但无法使用行号在树视图中选择相关节点

有人知道我怎样才能做到这一点吗

非常感谢您的任何提示:

问候

更新:

填充树视图的代码:

doc.Load(XMLDocPath);
XmlNodeTree root = new XmlNodeTree(0, doc.LastChild);
treeDGUXml.Nodes.Add(root);
FillTreeView(root.Nodes, doc.LastChild.ChildNodes);
方法是:

private void FillTreeView(TreeNodeCollection c, XmlNodeList l)
{
  if (l == null)
  {
    return;
  }

  foreach (XmlNode e in l)
  {
    XmlNodeTree n = new XmlNodeTree(nRow, e);
    c.Add(n);
    FillTreeView(n.Nodes, e.ChildNodes);
  }
班级:

public class XmlNodeTree : TreeNode
{
  private XmlNode mNode;
  public XmlNode Node
  {
    get { return mNode; }
  }

  public XmlNodeTree(int rownumber, XmlNode node)
  {
    mNode = node;
    if (node.NodeType == XmlNodeType.Text)
    {
      Text = node.InnerText;
    }
    else
    {
      Text = rownumber.ToString() + " - " + node.Name;
      nRow++;
    }

    if (node.Attributes != null)
    {
      foreach (XmlAttribute a in node.Attributes)
      {
        Text += " " + a.OuterXml;
      }
    }
  }
}

非常感谢你的提示。我决定在没有treeview的情况下采用另一种方法。我将XML加载到带有适当颜色的richtext框中。这样我可以选择相关的文本。用户无法折叠xml结构,但现在这总比什么都没有好;无论如何,谢谢你的建议

非常感谢您的提示。我决定在没有treeview的情况下采用另一种方法。我将XML加载到带有适当颜色的richtext框中。这样我可以选择相关的文本。用户无法折叠xml结构,但现在这总比什么都没有好;无论如何,谢谢你的建议

如果使用xml linq,则可以使用List children=doc.subjects.ToList;然后孩子们将被编入索引。Thx用于快速反馈。实际上,我在理解你的提示时遇到了一些困难--为了更好地理解,我添加了上面的相关代码。问题是我无法使用来自验证错误的行号,因为treview不显示结束xml标记,例如:doc.subjects.Wherex=>x.GetType!=XmlNodeType.EndElement.GetType&&x.GetType!=XmlNodeType.Text.GetType.ToList;嗯…问题是博士的后代。。。。给我的是一个错误System.Xml.XmlDocument不包含…的定义。上面提到的错误是因为我使用System.Xml中的XmlDocument,而不是System.Xml.Linq中的XDocument。问题是我不能使用XDocument,因为这样其他部分就无法工作了……如果使用xml linq,那么可以使用List children=doc.subjections.ToList;然后孩子们将被编入索引。Thx用于快速反馈。实际上,我在理解你的提示时遇到了一些困难--为了更好地理解,我添加了上面的相关代码。问题是我无法使用来自验证错误的行号,因为treview不显示结束xml标记,例如:doc.subjects.Wherex=>x.GetType!=XmlNodeType.EndElement.GetType&&x.GetType!=XmlNodeType.Text.GetType.ToList;嗯…问题是博士的后代。。。。给我的是一个错误System.Xml.XmlDocument不包含…的定义。上面提到的错误是因为我使用System.Xml中的XmlDocument,而不是System.Xml.Linq中的XDocument。问题是我不能使用XDocument,因为那样的话,另一方将不再工作。。。