如何确定标签的数量

时间:2010-03-10 15:53:06

标签: c# xml

我有一些名为Sample.xml的xml文件,如下所示

  <?xml version="1.0" encoding="ISO-8859-1"?>

<countries>

<country>
  <text>Norway</text>
  <value>N</value>
</country>

<country>
  <text>Sweden</text>
  <value>S</value>
</country>

<country>
  <text>France</text>
  <value>F</value>
</country>

<country>
  <text>Italy</text>
  <value>I</value>
</country>

</countries>

我有一个名为submit(button1)的按钮。如果我单击该按钮,我需要在名为textBox1的文本框中显示计数(PartitionName =“AIX”),表示PartitionName =“AIX”属于Type = “NIC”

任何人都可以给我c#代码

我确实喜欢这个,但却无法得到答案

private void button1_Click(object sender, EventArgs e)
    {
        XmlDocument doc1 = new XmlDocument();
        doc1.Load(@"D:\New Folder\WindowsFormsApplication3\WindowsFormsApplication3\Sample.xml");
        XmlNodeList a = doc1.GetElementsByTagName("AIX");
        textBox1.Text = a.Count.ToString();
    }

3 个答案:

答案 0 :(得分:3)

这是我使用linq快速解决的问题。希望你觉得它很有用。

static void Main(string[] args)
    {
        XElement xElement = XElement.Load(@"C:\Labs\test.xml");

        // PartitionName="AIX" is belonging to Type="NIC"
        var count = xElement.Descendants().Where(x => x.Name.ToString().Contains("Port")) // namespaces might be used here for faster traversal..
                    .Where(x => x.HasAttributes && x.Attribute("Type").Value == "NIC")
                    .Descendants().Where(x => x.Name.ToString().Contains("Client"))
                    .Where(x => x.Attribute("PartitionName").Value == "AIX").Count();       


        string str = count.ToString();

        Console.WriteLine("Count = {0}", str);
        Console.ReadLine();              

    }

答案 1 :(得分:1)

使用类似这样的xpath:

count(vendor/Slot/Port[@Type='NIC']/Client[@PartitionName='AIX'])

但您必须修改它以支持您的命名空间。

[编辑 - 完整代码,因为有人决定对此进行投票 - 叹息]

与针对此特定情况的Linq路线相比,代码也更容易和更短。

XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
XmlNamespaceManager nsMgr = new XmlNamespaceManager(doc.NameTable);
nsMgr.AddNamespace("inv", "http://secon.com/Ultravendor");
int count  = doc.SelectNodes("inv:vendor/inv:Slot/inv:Port[@Type='NIC']/inv:Client[@PartitionName='AIX']", nsMgr).Count;

答案 2 :(得分:0)

XmlDocument doc1 = new XmlDocument();             doc1.Load(@ “C:\实验室\的test.xml”);

        XmlNodeList nodes = doc1.GetElementsByTagName("inv:Port");
        int count = 0;
        foreach (XmlNode childNode in nodes)
        {
            XmlNodeReader nodeReader = new XmlNodeReader(childNode);

            while (nodeReader.Read())
            {
                if (nodeReader.GetAttribute("PartitionName") == "AIX")
                {
                    count++;
                }               

            }               
        }       

        Console.WriteLine("Count = {0}", count);
        Console.ReadLine();