我有一些名为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();
}
答案 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();