[英]C# XML Element Count in XML Node
我需要获取特定的<EmpTypeHeader>
和<EID>.
的EmpList
标签的计数<EID>.
例如:
EID - 9991515720640 with 1st EmpTypeHeader(XML Node) tag Contains 2 EmpList Tag
EID - 4534545454534 with 2nd EmpTypeHeader(XML Node) tag Contains 1 EmpList Tag
EID - 8998653323 with 3rd EmpTypeHeader(XML Node) tag Contains 1 EmpList Tag
但是,当我选择EMPList
标签计数时,它显示的总数为4。
我的XML:
<Employee>
<EmployeeHeader>
<Date>2016-01-07</Date>
<Time>03:45:39</Time>
</EmployeeHeader>
<EmpTypeHeader>
<EID>9991515720640</EID>
<AAA>4</AAA>
<BBB />
<EmpList>
<CCC>222</CCC>
<DDD>3333</DDD>
<EEE>2050-09-25</EEE>
<FFF>000</FFF>
</EmpList>
<EmpList>
<CCC>555</CCC>
<DDD>666</DDD>
<EEE>2050-09-25</EEE>
<FFF>000</FFF>
</EmpList>
</EmpTypeHeader>
<EmpTypeHeader>
<EID>4534545454534</EID>
<AAA>66</AAA>
<BBB />
<EmpList>
<CCC>999</CCC>
<DDD>008</DDD>
<EEE>2050-09-25</EEE>
<FFF>000</FFF>
</EmpList>
</EmpTypeHeader>
<EmpTypeHeader>
<EID>8998653323</EID>
<AAA>9999</AAA>
<BBB />
<EmpList>
<CCC>11333334</CCC>
<DDD>663312</DDD>
<EEE>2050-09-25</EEE>
<FFF>000</FFF>
</EmpList>
</EmpTypeHeader>
</Employee>
而我的代码:
private void ReadXMLEmp()
{
string eid = "9991515720640";
string strFileName = @"D:\Raseeth\Test1.xml";
xmlDocument = new XmlDocument();
xmlDocument.Load(strFileName);
xmlNodeListEmpTypeHeader = xmlDocument.SelectNodes("//EmpTypeHeader");
if (xmlNodeListEmpTypeHeader != null)
{
int empListCount = 0;
foreach (XmlNode xmlNodeEmpTypeHeader in xmlNodeListEmpTypeHeader)
{
if (xmlNodeEmpTypeHeader["EID"] != null && xmlNodeEmpTypeHeader["EID"].InnerText.Trim() == eid)
{
empListCount = xmlNodeEmpTypeHeader.SelectNodes("//Position").Count;
Console.WriteLine("EmpList Count : " + empListCount);
bFlag = true;
break;
}
}
}
}
如果可以使用.Net 3.5
XElement root = XElement.Load(strFileName);
int total = 0;
foreach(var eid in root.Descendants("EID").ToList())
{
int count = eid.Parent.Elements("EmpList").Count();
Console.WriteLine(eid.Value + " " + count.ToString());
total += count;
}
Console.WriteLine("Total EmpList's: " + total.ToString());
我不是很了解这个问题。 您是否要通过EID获得EmpList的总数或EmpList的总数? 我都做过
问题是您的XPath表达式。 //Position
将找到该名称的文档中的所有节点,而您仅对当前节点的后代感兴趣。
将其更改为.//Position
.
指当前节点上下文。
话虽如此,LINQ to XML是一种比XPath和旧版XmlDocument
API更为简洁的解决方案,例如:
var count = XDocument.Load("path/to/file.xml")
.Descendants("EmpTypeHeader")
.Where(x => (string) x.Element("EID") == "9991515720640")
.Descendants("Position")
.Count();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.