【问题标题】:Parse XML into accordion/treeview将 XML 解析为手风琴/树视图
【发布时间】:2022-01-03 16:36:13
【问题描述】:

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

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

VersionID = v1.0.0 CCNumber = CSV-003-CC-20-09 描述 = 硬代码稀释

  1. SimoaPlateImport.cs - 用于稀释的硬编码整洁。更新了 DataTable 名称以匹配供应商文档。
  2. CalibrationPoints.cs - 将试剂名称文本框更改为组合框。预填充 NF 光”
  3. CalibrationPoints.cs - 添加了自动填充校准器 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; }

    }

}

【问题讨论】:

  • 您可能希望使用XmlDocument.LoadXml(yourXml) 将其放入对象中,然后递归地循环遍历节点和属性,从中创建TreeNodes。到目前为止你有什么?

标签: c# xml datagridview treeview


【解决方案1】:

我反序列化了 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; }
    }
}

【讨论】:

  • 谢谢你,在你的帮助下我成功了!不优雅,但实用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-26
相关资源
最近更新 更多