计算特定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_Summary
和 Company_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#的子节点数[重复]的主要内容,如果未能解决你的问题,请参考以下文章
给元素添加子节点,元素子节点数改变,反过来影响上方调用其值的异步任务回调函数(如click。load,定时器等
给元素添加子节点,元素子节点数改变,反过来影响上方调用其值的异步任务回调函数(如click。load,定时器等