【问题标题】:Count number of child nodes for specific XML Node c# [duplicate]计算特定XML节点c#的子节点数[重复]
【发布时间】: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)
  • 是的,没错!

标签: c# xml xmldocument


【解决方案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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多