C# 如何从比较XML中筛选结果&;XSD?

C# 如何从比较XML中筛选结果&;XSD?,c#,xml,wpf,C#,Xml,Wpf,我将WPF中的一个XML和一个XSD集合与TreeViewItem进行比较。 我终于得到了以红色显示的缺失结果。 但是如何将XSD集合的结果过滤到列表框中,以便它只能显示红色的行(值) private void CompareTrees(ItemCollection xml, ItemCollection xsd, List<string> path) { foreach (TreeViewItem tvixsd in xsd.OfType<TreeVi

我将WPF中的一个XML和一个XSD集合与TreeViewItem进行比较。 我终于得到了以红色显示的缺失结果。 但是如何将XSD集合的结果过滤到列表框中,以便它只能显示红色的行(值)

private void CompareTrees(ItemCollection xml, ItemCollection xsd, List<string> path)
    {
        foreach (TreeViewItem tvixsd in xsd.OfType<TreeViewItem>())
        {
            path.Add(tvixsd.Header.ToString());

            if (tvixsd.HasItems)
            {
                CompareTrees(xml, tvixsd.Items, path);
            }
            else
            {
                TreeViewItem res = xml.OfType<TreeViewItem>().FirstOrDefault();
                foreach (var point in path.Skip(1))
                {
                    res = res.Items.OfType<TreeViewItem>().FirstOrDefault(i => i.Header.ToString() == point);
                    if (res == null)
                    {                            
                        treeViewCom.Items.Add(res);
                        tvixsd.Foreground = Brushes.Red;

                        break;
                    }

                    if (!res.HasItems)
                    {
                        break;
                    }
                }
            }

            if (path.Count != 0)
            {
                path.RemoveAt(path.Count - 1);
            }
        }
    }
private void比较对象(ItemCollection xml、ItemCollection xsd、列表路径)
{
foreach(xsd.OfType()中的TreeViewItem tvixsd)
{
Add(tvixsd.Header.ToString());
如果(tvixsd.HasItems)
{
比较对象(xml、tvixsd.Items、path);
}
其他的
{
TreeViewItem res=xml.OfType().FirstOrDefault();
foreach(路径中的变量点。跳过(1))
{
res=res.Items.OfType().FirstOrDefault(i=>i.Header.ToString()==point);
如果(res==null)
{                            
treeViewCom.Items.Add(res);
前景=画笔。红色;
打破
}
如果(!res.HasItems)
{
打破
}
}
}
如果(path.Count!=0)
{
path.RemoveAt(path.Count-1);
}
}
}

谢谢

设置
项目集合的
过滤器
属性

xsd.Filter = (obj) =>
{
    TreeViewItem tvi = obj as TreeViewItem;
    return tvi != null && tvi.Foreground == Brushes.Red;
};

对哪些项集合排序?xsd项集合在UI中的显示位置和方式?treeviews用于xml和xsd文件以及listbox的结果。您是指排序或筛选吗?我或其他人是否应该知道“tvixsd错误”实际上意味着…?我的意思是,当我从代码中用tvi更改tvixsd时,我的if会出错(!res.HasItems)“对象引用未设置为对象的实例。'res为null。“更改tvixsd?我没有建议这样做。在foreach(xsd.OfType()中的TreeViewItem tvixsd)循环后添加我的代码。是否确实有前景为红色的任何项目?应用筛选器时仅显示这些项目。