Работа с XML

Здравствуйте:)Написала вот такую программу на С#, но не получается последний пункт(((
Необходимо реализовать:Подсчет общего количества узлов в структуре загруженного
XML-файла

using System.IO;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml;
using System.Xml.XPath;

namespace LAB1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

        }
        public string originalFilename = "student.hml";
        public void CreateXmlDocument(string originalFilename)
        {// создание исходного XML-документа
            XmlDocument STUDENT = new XmlDocument();
            STUDENT.PreserveWhitespace = true;
            STUDENT.LoadXml("<Student>\n" +
                            "<studentinfo>\n" +
                            "<lastname>Gordon</lastname>\n" +
                            "<firstname>Alisa</firstname>\n" +
                            "<midlename>Andreevna</midlename>\n" +
                            "<borndate>14.04.2000</borndate>\n" +
                            "<Specialty>Information Security</Specialty>\n" +
                            "<groupname>IBAS-171</groupname>\n" +
                            "<currentyear>2</currentyear>\n" +
                            "<idnumber>123456</idnumber>\n" +
                            "</studentinfo>\n" +
                            "</Student>\n");
            // Запись исходного XML-документа в файл
            STUDENT.Save("C:/Users/Леново/Documents/Visual Studio 2019/student.xml");
            MessageBox.Show("Created");

        }


        private void button1_Click(object sender, System.EventArgs e)
        {
            CreateXmlDocument(originalFilename);
        }

        private void button2_Click(object sender, System.EventArgs e)
        {
            using (OpenFileDialog dialog = new OpenFileDialog())
            {
                if (dialog.ShowDialog() == DialogResult.OK)
                {
                    richTextBox1.Text = File.ReadAllText(dialog.FileName);
                }
            }
        }

        private void button3_Click(object sender, System.EventArgs e)
        {
            var a = (int)numericUpDown1.Value;
            XmlDocument STUDENT = new XmlDocument();
            STUDENT.Load("C:/Users/Леново/Documents/Visual Studio 2019/student.xml");
            XmlElement userElem = STUDENT.CreateElement("user");
            XmlElement Mark = STUDENT.DocumentElement;
            XmlAttribute markAttr = STUDENT.CreateAttribute("Mark");
            XmlText nameText = STUDENT.CreateTextNode(" " + a);
            markAttr.AppendChild(nameText);
            Mark.AppendChild(userElem);
            userElem.Attributes.Append(markAttr);
            STUDENT.Save("C:/Users/Леново/Documents/Visual Studio 2019/student.xml");
        }

        private void button4_Click(object sender, System.EventArgs e)

        {  
            //XmlDocument STUDENT = new XmlDocument();
            //STUDENT.Load("C:/Users/Леново/Documents/Visual Studio 2019/student.xml");
          // XmlNode node = STUDENT.SelectSingleNode(string.Format("/user[Mark="));
          //  STUDENT.SelectSingleNode("studentinfo").RemoveChild(node);

Прошу вас помочь, кто что знает :pray:

А что имеется в виду под узлами?

Оно XPath принимает. XPath Syntax

Это я удаление сделать пыталась, а подсчет вообще не знаю как сделать:(
Нужно во всем созданном документе узлы подсчитать, и вывести число в Textbox, и все это при нажатии на кнопку

Вот допустим узел <Student>... </Student>, и программа должна посчитать его как 1, пройтись по документу и вывести количество всех узлов

Считать только студентов или любые элементы?

любые, все узлы

Рекурсивно обходить ChildNodes.

Или гугл говорит, что можно через XPath

                var xmlDoc = new XmlDocument();
                xmlDoc.LoadXml(@"<?xml version=""1.0"" encoding=""UTF-8""?>
<root>
    <foo>
        <bar />
    </foo>
    <foobar>
        <foo>
            <foo>
            </foo>
        </foo>
    </foobar>
</root>");
            var allNodes = xmlDoc.SelectNodes("descendant::*");
            Console.WriteLine(allNodes.Count); // 6
1 лайк

А если не для консоли,то что можно использовать?:slight_smile:

Так тут консоль только для вывода результата.

А как же Count?

Так это и есть оно. Какая разница куда выводить allNodes.Count? Хоть в консоль, хоть текстбокс, хоть файл.

Получается можно таким образом? :upside_down_face:

XmlDocument STUDENT = new XmlDocument();
var allNodes = STUDENT.SelectNodes("descendant::*");
textBox1.Text = allNodes.Count.ToString();

Если работает, значит можно )

В том то и дело,что нет))Выводит 0 и всё

Если прям этот код, то тут пустой документ.

Было же

1 лайк

Вот только что это осознала, спасибо большое