计算特定XML节点c#的子节点数[重复]

Posted

技术标签:

【中文标题】计算特定XML节点c#的子节点数[重复]【英文标题】:Count number of child nodes for specific XML Node c# [duplicate] 【发布时间】:2020-05-26 23:05:30 【问题描述】:

我想遍历这个 XML 文件 (XmlDocument) 并计算每个 Employee Element 的子节点数。我想遍历 ID 为 1 的员工,计算子节点的数量,然后将其保存到 HashSet,其中员工 ID 为键,子节点的数量为值。我的问题是,如何将每个 Employee 映射到 Employee ID 值?

XML 文件:

<Workers>
    <Employee>
            <Employee_Summary>
                <Employee_ID>1</Employee_ID>
                <Name>Name </Name>
                <Company_Code>Company Code</Company_Code>
                <Unit_Code>Unit Code</Unit_Code>
            </Employee_Summary>
            <Company_Summary>
                <Company_Name> Company Name</Company_Name>
                <Company_Adress> Company Adress </Company_Adress>
                <Company_Status> Company Status <Company_Status>
            </Company_Summary>
    </Employee>

    <Employee>
            <Employee_Summary>
                <Employee_ID>2</Employee_ID>
                <Name>Name </Name>
                <Company_Code>Company Code</Company_Code>
                <Unit_Code>Unit Code</Unit_Code>
            </Employee_Summary>
            <Company_Summary>
                <Company_Name> Company Name</Company_Name>
            </Company_Summary>
    </Employee>


    <Employee>
            <Employee_Summary>
                <Employee_ID>3</Employee_ID>
                <Name>Name </Name>
                <Unit_Code>Unit Code</Unit_Code>
            </Employee_Summary>
            <Company_Summary>
                <Company_Name> Company Name</Company_Name>
                <Company_Adress> Company Adress </Company_Adress>
                <Company_Status> Company Status <Company_Status>
            </Company_Summary>
    </Employee>
</Workers>

【问题讨论】:

什么是“子节点”? Name 是子节点吗? Company_SummaryCompany_Name 呢? 是的,Employee标签下的所有东西都被认为是一个子节点。 那么ID为1的Employee有9个子节点? (Employee_Summary, Employee_ID, Name, Company_Code, Unit_Code, Company_Summary, Company_Name, Company_Adress, Company_Status) 是的,没错! 这能回答你的问题吗? Getting the count of xml elements under an XML Node 【参考方案1】:

您可以使用XDocument 轻松做到这一点:

var doc = XDocument.Parse(xml);
var results = new Dictionary<int, int>();
foreach (var employee in doc.Root.Elements("Employee"))

    int id = (int)employee.Element("Employee_Summary").Element("Employee_ID");
    int count = employee.Descendants().Count();
    results[id] = count;

你也可以使用XmlDocument:

var doc = new XmlDocument();
doc.LoadXml(xml);
var results = new Dictionary<int, int>();
foreach (XmlNode employee in doc.SelectNodes("/Workers/Employee"))

    int id = int.Parse(employee.SelectSingleNode("./Employee_Summary/Employee_ID").InnerText);
    int count = employee.SelectNodes(".//*").Count;
    results[id] = count;

【讨论】:

以上是关于计算特定XML节点c#的子节点数[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何反序列化xml文件的子节点

给元素添加子节点,元素子节点数改变,反过来影响上方调用其值的异步任务回调函数(如click。load,定时器等

给元素添加子节点,元素子节点数改变,反过来影响上方调用其值的异步任务回调函数(如click。load,定时器等

javascript中children和childNodes的区别

使用 linq 和 c# 的最大父 ID 的子节点数

在C#中查找所有特定值的子节点