特定XML节点c#的子节点数

问题描述 投票:0回答:1

我想遍历此XML文件(XmlDocument)并计算每个Employee元素具有的子节点数。我想遍历ID为1的Employee,计算子节点的数量,然后将其保存到HashSet中,并将Employee 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>
c# xml xmldocument
1个回答
2
投票

您可以通过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;
}
© www.soinside.com 2019 - 2024. All rights reserved.