我创建了一个小型XML工具,它为我提供了来自多个XML文件的特定XML标记的数量。
此代码如下:
public void SearchMultipleTags()
{
if (txtSearchTag.Text != "")
{
try
{
//string str = null;
//XmlNodeList nodelist;
string folderPath = textBox2.Text;
DirectoryInfo di = new DirectoryInfo(folderPath);
FileInfo[] rgFiles = di.GetFiles("*.xml");
foreach (FileInfo fi in rgFiles)
{
int i = 0;
XmlDocument xmldoc = new XmlDocument();
xmldoc.Load(fi.FullName);
//rtbox2.Text = fi.FullName.ToString();
foreach (XmlNode node in xmldoc.GetElementsByTagName(txtSearchTag.Text))
{
i = i + 1;
//
}
if (i > 0)
{
rtbox2.Text += DateTime.Now + "\n" + fi.FullName + " \nInstance: " + i.ToString() + "\n\n";
}
else
{
//MessageBox.Show("No Markup Found.");
}
//rtbox2.Text += fi.FullName + "instances: " + str.ToString();
}
}
catch (Exception)
{
MessageBox.Show("Invalid Path or Empty File name field.");
}
}
else
{
MessageBox.Show("Dont leave field blanks.");
}
}
此代码返回用户想要的多个XML文件中的标记计数。
现在我想搜索XML文件中存在的特定文本及其计数。
您能否使用XML类建议代码。
谢谢和问候, Mayur Alaspure
答案 0 :(得分:0)
System.Xml.XPath。
Xpath支持计数:count(// nodeName)
如果您想计算具有特定文字的节点,请尝试
count(//*[text()='Hello'])
请参阅How to get count number of SelectedNode with XPath in C#?
顺便说一下,你的函数应该看起来更像这样:
private int SearchMultipleTags(string searchTerm, string folderPath) { ...
//...
return i;
}
答案 1 :(得分:0)
使用 LINQ2XML 代替..它简单而完全取代其他XML API
XElement doc = XElement.Load(fi.FullName);
//count of specific XML tags
int XmlTagCount=doc.Descendants().Elements(txtSearchTag.Text).Count();
//count particular text
int particularTextCount=doc.Descendants().Elements().Where(x=>x.Value=="text2search").Count();
答案 2 :(得分:0)
尝试使用XPath
:
//var document = new XmlDocument();
int count = 0;
var nodes = document.SelectNodes(String.Format(@"//*[text()='{0}']", searchTxt));
if (nodes != null)
count = nodes.Count;