将 XML 解析为 accordion/treeview

Parse XML into accordion/treeview

我找不到解析我的 XML 的方法。我不确定是 XML 格式错误还是代码问题。

我想使用 datagridview 或 treeview 在关于页面上显示它,如下所示:

VersionID = v1.0.0 CCNumber = CSV-003-CC-20-09 Description = Hard Code Dilution

  1. SimoaPlateImport.cs - 用于稀释的硬编码 Neat。更新了数据表名称以匹配供应商文档。
  2. CalibrationPoints.cs - 将试剂名称文本框更改为组合框。预填充 NF-light"
  3. CalibrationPoints.cs - 添加了自动填充 Calibrator DataGrid 的自动填充框

这是我的 XML:

<?xml version="1.0"?>
<VersionHistory>
  <version VersionID="v1.0.0">
    <CCNumber>CSV-003-CC-20-09</CCNumber>
    <Description>Initial Release</Description>
    <Changes>Inital Release</Changes>
  </version>
  <version VersionID="v1.1.0">
    <CCNumber>CSV-003-CC-20-11</CCNumber>
    <Description>Hard Code Dilution Factor</Description>
    <Changes id="0" note="SimoaPlateImport.cs - Hardcoded Neat for Dilutions.  Updated DataTable names to match the vendor document." />
    <Changes id="1" note="ClibrationPoints.cs - Changed Reagent Name textbox to combobox.  Prepopulated with NF-light" />
    <Changes id="2" note="ClibrationPoints.cs - Added Auto Fill Box that populates Calibrator DataGrid Automatically" />
  </version>
  <version VersionID="v2.0.0">
    <CCNumber>CRMA-18-03-CC-05</CCNumber>
    <Description>Updated System to run on Watson 7.6.1</Description>
    <Changes id="0" note="Added OracleData.cs class to create a Data Connector to Watson Oracle Database." />
    <Changes id="1" note="ClibrationPoints.cs - Changed Reagent Name textbox to combobox.  Prepopulated with NF-light" />
    <Changes id="2" note="ClibrationPoints.cs - Added Auto Fill Box that populates Calibrator DataGrid Automatically" />
    <Changes id="3" note="SimoaPlateImport.cs - Modified code to populate standards from Watson DB" />
    <Changes id="4" note="DataConnector.cs - Modified Form layout and supporting code" />
    <Changes id="5" note="About.cs - Created About Form with Change History" />
  </version>
</VersionHistory>

我能够让这个工作: https://imgur.com/e48JldH

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Xml;
using System.Xml.Serialization;

namespace CRLDataConnector
{
    public partial class About : Form
    {
        public string filepath = "C:\Repo\CRLDataConnector\CRLDataConnector 2.0\CRLDataConnector\VersionHistory.xml";
        public About()
        {
            XmlReader reader = XmlReader.Create(filepath);
            XmlSerializer serializer = new XmlSerializer(typeof(VersionHistory));
            VersionHistory versionHistory = (VersionHistory)serializer.Deserialize(reader);

            InitializeComponent();
            treeLoad(versionHistory);
        }

        private void About_Load(object sender, EventArgs e)
        {
            //temp();

        }
        private void treeLoad(VersionHistory versionHistory)
        {
            for (int i = 0; i <= versionHistory.versions.Count - 1; i++)

            {
                string versionID = "[" + versionHistory.versions[i].id.ToString() + "] ";
                string versionDescrip = versionHistory.versions[i].Description.ToString();
                string versionCC = " [CC# " + versionHistory.versions[i].CCNumber.ToString() + "]";
                treeAbout.Nodes.Add(versionID + versionDescrip + versionCC);
                for (int x = 0; x <= versionHistory.versions[i].changes.Count - 1; x++)

                {
                    string changeID = "[" + versionHistory.versions[i].changes[x].id.ToString() + "] ";
                    string changeNote = versionHistory.versions[i].changes[x].note.ToString();
                    treeAbout.Nodes[i].Nodes.Add(changeID + changeNote);
                }
            }
        }
    }
    public class VersionHistory
    {
        [XmlElement("version")]
        public List<Version> versions { get; set; }


    }
    public class Version
    {
        [XmlAttribute("VersionID")]
        public string id { get; set; }

        public string CCNumber { get; set; }

        public string Description { get; set; }

        [XmlElement("Changes")]
        public List<Changes> changes { get; set; }
    }
    public class Changes
    {
        [XmlAttribute()]
        public int id { get; set; }

        [XmlAttribute()]
        public string note { get; set; }

    }

}

我反序列化了 xml。看看您是否可以从 类

中自己创建树视图
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Serialization;

namespace ConsoleApplication9
{
    class Program
    {
        static string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            XmlReader reader = XmlReader.Create(FILENAME);
            XmlSerializer serializer = new XmlSerializer(typeof(VersionHistory));
            VersionHistory versionHistory = (VersionHistory)serializer.Deserialize(reader);
        }
    }
    public class VersionHistory
    {
        [XmlElement("version")]
        public List<Version> versions { get; set; }
    }
    public class Version
    {
        [XmlAttribute("VersionID")]
        public string id { get; set; }

        public string CCNumber { get; set; }

        public string Description { get; set; }

        [XmlElement("Changes")]
        public List<Changes> changes { get; set; }
    }
    public class Changes
    {
        [XmlAttribute()]
        public int id { get; set; }

        [XmlAttribute()]
        public string note { get; set; }

        [XmlText]
        public string value { get; set; }
    }
}