Member 13405694 Ответов: 2

Почему мой счетчик XML-элементов всегда возвращает 0?


Я пытаюсь подсчитать элементы внутри корня, а затем добавить элемент к этому корню и дать ему имя, основанное на подсчете с самого начала. Вот мой XML:

<NewDataSet>
  <Klasse>
   
  </Klasse>
  <Sub>

  </Sub>
</NewDataSet>


а вот мой код:

private void buttonSchSave_Click(object sender, EventArgs e)
 {

     XmlDocument xmldoc = new XmlDocument();
     xmldoc.Load("Klassen/NeueKlasse1.xml");
     int neuSchV = xmldoc.SelectNodes("Sub").Count;

     XDocument doc = XDocument.Load("Klassen/NeueKlasse1.xml");

     XElement root = new XElement("SubAdd" + neuSchV);
     var elementName = doc.Descendants("Sub")?.SingleOrDefault();
     elementName.Add(root);



     doc.Save("Klassen/NeueKlasse1.xml");





 }


Проблема в том, что все элементы "SubAdd" имеют имя: SubAdd0

Счетчик Xml-элементов всегда возвращает значение 0, Есть идеи, как это решить?

Спасибо.

Что я уже пробовал:

ища подобную проблему, я действительно не нашел ничего, что мог бы использовать.

2 Ответов

Рейтинг:
2

Karthik_Mahalingam

int neuSchV = xmldoc.SelectNodes("/NewDataSet/Sub").Count;

относиться Выберите узлы XML по имени [C#][^]


Рейтинг:
19

Richard Deeming

Вы, вероятно, не хотите смешивать XmlDocument и XDocument В конечном итоге вы загружаете один и тот же файл дважды, что может стать проблемой, если ваш файл станет достаточно большим.

Нет также никакого реального смысла в подсчете Sub элементы, так как SingleOrDefault вызовет исключение, если их больше одного. Вы хотели посчитать дочерние элементы Sub элемент вместо этого?

XDocument doc = XDocument.Load("Klassen/NeueKlasse1.xml");
if (doc.Root == null)
{
    doc.Add(new XElement("NewDataSet"));
}

XElement subNode = doc.Root.Element("Sub");
if (subNode == null)
{
    subNode = new XElement("Sub");
    doc.Root.Add(subNode);    
}

int neuSchV = subNode.Elements().Count();
XElement subAddNode = new XElement("SubAdd" + neuSchV);
subNode.Add(subAddNode);

doc.Save("Klassen/NeueKlasse1.xml");