Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 计算XML中特定的XML节点数_C#_Asp.net_Xml - Fatal编程技术网

C# 计算XML中特定的XML节点数

C# 计算XML中特定的XML节点数,c#,asp.net,xml,C#,Asp.net,Xml,请参见以下XML: 502 503 517 518 519 522 528 536 702 703 我想动态地从这个xml中获取节点总数(C#)。 我怎么做?有任何示例代码吗?请像这样使用XmlDocument: XmlDocument xmlD = new XmlDocument(); xmlD.Load(Server.MapPath("sample.xml")); XmlNodeList xmlNL = xmlD.GetElementsByTagName("tagName"); xm

请参见以下XML:



502
503
517
518
519
522
528
536
702
703

我想动态地从这个xml中获取节点总数(C#)。
我怎么做?有任何示例代码吗?

请像这样使用XmlDocument:

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

下面是一个计算xml文档中所有
子菜单ID
节点的示例,无需将其加载到内存中:

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();

也可以使用XPath函数“count”。这里有一个例子

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

下面的代码是查找
XML文档中特定节点的计数

 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()));
    }

如果您可以控制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);
string xmlReturn=”
502
503
517
518
519
522
528
536
702
703
"
XmlDocument xmldoc=新的XmlDocument();
LoadXml(xmlReturn);
XmlNodeList nodeListCount=xmldoc.GetElementsByTagName(“子菜单ID”);
int nodeCount=nodeListCount.Count;
控制台写入线(nodeCount);

您希望对哪些节点进行计数?全部计数是什么意思。是否要计算xml文档中的子菜单ID元素或所有元素?这对我来说很有效,但我必须将其转换为两倍。这篇文章发表已经十年了,所以这很可能是2010年以来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);