Чтение определенного текста из файлов XML

Я создал небольшой 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.

Спасибо и С уважением, Майур Аласпур


person Mayur Alaspure    schedule 10.10.2012    source источник
comment
: что ты пробовал Маюр ? Ваш предыдущий пост stackoverflow.com/questions/12776198/reading-multiple-xml -files также содержал тот же фрагмент кода. Что вы пробовали, прежде чем задать вопрос.   -  person Milind Thakkar    schedule 10.10.2012
comment
@MilindThakkar: Это было для специальной разметки, и теперь я ищу конкретный текст в XML-файле. И спасибо за ваш предыдущий ответ, он работает, и я использую только ваш код.   -  person Mayur Alaspure    schedule 10.10.2012
comment
Два момента, Майур: во-первых, я не вижу никаких изменений в фрагменте кода, указанном в другом вопросе и в этом. Так сомневаюсь в том, что вы пытались сделать, прежде чем задать вопрос здесь. Во-вторых, если вас устраивает чей-либо ответ, вы должны отметить его как ответ и/или проголосовать за него.   -  person Milind Thakkar    schedule 10.10.2012
comment
Я новичок. Так что не такая репутация, чтобы проголосовать за это.   -  person Mayur Alaspure    schedule 10.10.2012


Ответы (3)


Вместо этого используйте 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();
person Anirudha    schedule 10.10.2012
comment
Большое спасибо, ваш код дает мне количество определенных тегов в файле XML. но я хочу искать определенный текст в файлах XML. - person Mayur Alaspure; 10.10.2012
comment
@MayurAlaspure посмотрите вторую часть кода в ответе - person Anirudha; 10.10.2012
comment
Я столкнулся с еще одной проблемой. Я создаю приложения в среде 3.5 и работаю на машине для разработки, но когда я запускаю это приложение на клиентском ПК, некоторые классы, такие как lineNumber, Line Position, не работают. Это проблема фреймворка или что? - person Mayur Alaspure; 10.10.2012

Система.Xml.XPath.

Xpath поддерживает подсчет: count(//nodeName)

If you want to count nodes with specific text, try

count(//*[text()='Hello'])

См. Как получить количество выбранных узлов с помощью XPath. на С#?

Кстати, ваша функция, вероятно, должна выглядеть примерно так:

private int SearchMultipleTags(string searchTerm, string folderPath) { ...
      //...
      return i;
}
person Jeffrey Knight    schedule 10.10.2012

Попробуйте использовать XPath:

//var document = new XmlDocument();
int count = 0;
var nodes = document.SelectNodes(String.Format(@"//*[text()='{0}']", searchTxt));
if (nodes != null)
    count = nodes.Count;
person Ria    schedule 10.10.2012