删除以编程方式创建的部分 TreeView 节点(来自 XML)

Posted

技术标签:

【中文标题】删除以编程方式创建的部分 TreeView 节点(来自 XML)【英文标题】:Remove part of programmatically created TreeView Nodes (from an XML) 【发布时间】:2020-11-15 10:58:53 【问题描述】:

我有读取预定义 XML 文件(我无法更改其内容)的代码,查找值标题并将其显示为树视图中的子节点。

这部分工作正常,但不幸的是,我必须使用的 XML 在这些标题中有不需要的文本。

目前的结果是: https://i.gyazo.com/3bc42cae37037030a8e18b96ce59da23.png

我现在需要删除每个名称开头的 中的内容。我知道string.remove 等,但鉴于代码将这些作为本地变量处理,我不确定如何处理。

中的内容无法预测,长度可能会有所不同,我可以肯定的是,这些内容将始终位于开头。

我目前的代码:

public partial class MainWindow : Window

    public MainWindow()
    
        InitializeComponent();
        BuildTree(treeView, XDocument.Load(@"C:\Program Files (x86)\Steam\steamapps\common\Mount & Blade II Bannerlord\Modules\SandBox\ModuleData\spkingdoms.xml"));
    

    private void BuildTree(TreeView treeView, XDocument doc)
    
        TreeViewItem treeNode = new TreeViewItem
        
            //Should be Root
            Header = "Kingdoms",
            IsExpanded = true
        ;
          treeView.Items.Add(treeNode);
          BuildNodes(treeNode, doc.Root);
    

    private void BuildNodes(TreeViewItem treeNode, XElement element)
    
            foreach (XNode child in element.Nodes())
            
                switch (child.NodeType)
                
                    case XmlNodeType.Element:
                        XElement childElement = child as XElement;
                        if (childElement.Attributes().Any(s => s.Name == "title"))  
                            TreeViewItem childTreeNode = new TreeViewItem
                            
                                //Get First attribute where it is equal to value
                                Header = childElement.Attributes().FirstOrDefault(s => s.Name == "title").Value,
                                //Automatically expand elements
                                IsExpanded = true
                            ;
                        treeNode.Items.Add(childTreeNode);
                        BuildNodes(childTreeNode, childElement);
                    

                        

                        break;
                        case XmlNodeType.Text:
                        XText childText = child as XText;
                        treeNode.Items.Add(new TreeViewItem  Header = childText.Value, );
                        break;
                
            
    

【问题讨论】:

【参考方案1】:

如果文本在 .Value 中,那么您将其取出,可能是:

.Value.Split('').Last()

您需要对 System.Linq 的引用

如果 value 为 null,您可以在 Value. 之间添加一个问号

【讨论】:

酷,不知道。Split 是一种价值谢谢。

以上是关于删除以编程方式创建的部分 TreeView 节点(来自 XML)的主要内容,如果未能解决你的问题,请参考以下文章

drupal 以编程方式禁用或删除节点创建节点链接

为啥 TreeView 控件会折叠所有子节点?

如何以编程方式单击剑道树视图节点[关闭]

动态载入TreeView时让TreeView节点前显示加号

Delphi TreeView 问题

UWP WinUI TreeView 以编程方式滚动到项目