2016-04-27 16 views
0

カウント:C#XML要素私は特に例えば<code><EmpTypeHeader></code>で<code>EmpList</code>タグの数と<code><EID>.</code></p> <p>を取得する必要がありますXMLノードに

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; 
      } 
     } 
    } 
} 
+0

は気にしないで、私はそれが表示されます盲目でした。 (前のコメントを削除しました) – CherryDT

答えて

0

問題はXPath式です。 //Positionは、その名前を持つ文書内のすべてのノードを検索しますが、現在のノードの子孫にのみ関心があります。

これを.//Positionに変更してください。.は、現在のノードコンテキストを参照しています。

はこのことを言って、XMLにLINQは、XPath例えば古いXmlDocument API、はるかにクリーンなソリューションです:

var count = XDocument.Load("path/to/file.xml") 
    .Descendants("EmpTypeHeader") 
    .Where(x => (string) x.Element("EID") == "9991515720640") 
    .Descendants("Position") 
    .Count(); 
+0

私は結果を得ました...ありがとう – Raseeth

0

は、.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()); 

を使用することができる場合、私は本当に質問を理解していませんよ。あなたはEmpListの総数またはEmpListの数をEIDで求めますか?私は両方をしました。

+0

私は結果を得ました...ありがとうございました – Raseeth

関連する問題