2010-02-18 3 views
3

Смотрите этот XML:граф конкретных XML узлов в пределах XML


<CMP> 
    <OMP3> 
     <personmenu> 
      <submenuid>502</submenuid> 
      <submenuid>503</submenuid> 
     </personmenu> 
     <accountsmenu> 
      <submenuid>517</submenuid> 
      <submenuid>518</submenuid> 
      <submenuid>519</submenuid> 
     </accountsmenu> 

     <reportsmenu> 
      <submenuid>522</submenuid> 
      <submenuid>528</submenuid> 
      <submenuid>536</submenuid> 
     </reportsmenu> 
    </OMP3> 

    <AMP3> 
     <admissionmenu> 
      <submenuid>702</submenuid> 
      <submenuid>703</submenuid> 
     </admissionmenu> 
    </AMP3> 
</CMP> 

Я хочу, чтобы получить общее количество узлов из этого XML динамически (C#). Как я могу это сделать? Любой пример кода?

+0

Какие узлы вы хотите сосчитать ? –

+0

Что делать по счету все. вы хотите подсчитать, например, элементы подменю или все элементы в документе xml? – affan

ответ

5

Использование XmlDocument так:

XmlDocument xmlD = new XmlDocument(); 
xmlD.Load(Server.MapPath("sample.xml")); 
XmlNodeList xmlNL = xmlD.GetElementsByTagName("tagName"); 
xmlNL.Count; 
10

Вот пример подсчета всех submenuid узлов в вашем XML-документе, не загружая его в память:

var nodeCount = 0; 
using (var reader = XmlReader.Create("test.xml")) 
{ 
    while (reader.Read()) 
    { 
     if (reader.NodeType == XmlNodeType.Element && 
      reader.Name == "submenuid") 
     { 
      nodeCount++; 
     } 
    } 
} 
Console.WriteLine(nodeCount); 

Или, если вы предпочитаете LINQ к XML:

var count = XDocument 
    .Load("test.xml") 
    .XPathSelectElements("//submenuid") 
    .Count(); 
0

Вы можете использовать функцию «подсчет» XPath. вот пример.

XPathDocument doc = new XPathDocument("c:\\test.xml"); 
int count = (int)doc.CreateNavigator().Evaluate("count(//submenuid)"); 
0

Ниже код, чтобы найти количество конкретного узла в XML Document

private void browse_Click(object sender, EventArgs e)//file browse button 
    { 
     DialogResult result = openFileDialog1.ShowDialog(); 
     if (result == DialogResult.OK) 
     { 
      String file = openFileDialog1.FileName; 
      if (Path.GetExtension(file) != ".xml") 
      { 
       MessageBox.Show("Please upload an vaild xml file"); 
       textBox1.Clear(); 
      } 
      else 
      { 
       textBox1.Text = file; 
      } 
     } 
    } 
private void CountButton_Click(object sender, EventArgs e)//count button 
    { 
     int count = 0; 
     string element = textBox2.Text;//Enter the node in the textbox 
     XmlDocument readdoc = new XmlDocument(); 
      readdoc.Load(textBox1.Text); 
      XmlElement root = readdoc.DocumentElement; 
      XmlNodeList node = root.GetElementsByTagName(element); 
      count = node.Count; 
      MessageBox.Show(string.Format("Count of {0} node in the uploaded xml file is {1}", element, count.ToString())); 
    } 
0

Если у вас есть контроль над вашей XML

string xmlReturn=" 
<CMP> 
<OMP3> 
    <personmenu> 
     <submenuid>502</submenuid> 
     <submenuid>503</submenuid> 
    </personmenu> 
    <accountsmenu> 
     <submenuid>517</submenuid> 
     <submenuid>518</submenuid> 
     <submenuid>519</submenuid> 
    </accountsmenu> 

    <reportsmenu> 
     <submenuid>522</submenuid> 
     <submenuid>528</submenuid> 
     <submenuid>536</submenuid> 
    </reportsmenu> 
</OMP3> 

<AMP3> 
    <admissionmenu> 
     <submenuid>702</submenuid> 
     <submenuid>703</submenuid> 
    </admissionmenu> 
</AMP3> 
</CMP>" 
XmlDocument xmldoc = new XmlDocument(); 
xmldoc.LoadXml(xmlReturn); 
XmlNodeList nodeListCount=xmldoc.GetElementsByTagName("submenuid"); 
int nodeCount = nodeListCount.Count; 
Console.WriteLine(nodeCount); 
Смежные вопросы