Я новичок в Xml и Linq, и я следил за учебным пособием на YouTube о том, как его использовать.
Ссылка на видео: https://thewikihow.com/video_OsfVJ485RY4
Проблема в том, что когда я запускаю код для изменения значения или его удаления, я всегда получаю следующую ошибку:
System.NullReferenceException: 'Object reference not set to an instance of an object.'
System.Xml.Linq.XElement.Attribute(...) returned null.
Прежде всего, я загружаю свой документ:
XDocument xmlDocument = XDocument.Load(@"C:\Users\matpl\source\repos\LinqToXML\LinqToXML\Data.xml");
Часть, где я хочу изменить значение документа Xml
xmlDocument.Element("Students")
.Elements("Student")
.Where(x => x.Attribute("Id").Value == "101").FirstOrDefault()
.SetElementValue("TotalMarks", "999");
Когда я хочу удалить элемент:
xmlDocument.Root.Elements().Where(x => x.Attribute("Id").Value == "104").Remove();
XML-файл:
<?xml version = "1.0" encoding = "utf-8" standalone = "yes"?>
<!--Comment Updated-->
<Students>
<Student>
<Student Id='101'>
<Name>Mark</Name>
<Gender>Male</Gender>
<TotalMarks>800</TotalMarks>
</Student>
<Student Id='102'>
<Name>Rosy</Name>
<Gender>Female</Gender>
<TotalMarks>900</TotalMarks>
</Student>
<Student Id='103'>
<Name>Pam</Name>
<Gender>Female</Gender>
<TotalMarks>850</TotalMarks>
</Student>
<Student Id='104'>
<Name>John</Name>
<Gender>Male</Gender>
<TotalMarks>950</TotalMarks>
</Student>
</Student>
<Student Id='105'>
<Name>Todd</Name>
<Gender>Male</Gender>
<TotalMarks>980</TotalMarks>
</Student>
</Students>
Спасибо,
Между Student
и Students
есть еще один элемент Student-101
. Похоже, у вас неправильный xml:
<Students>
<Student> //WHAT IS IT?
<Student Id='101'>
<Name>Mark</Name>
<Gender>Male</Gender>
<TotalMarks>800</TotalMarks>
</Student>
<Student Id='102'>
<Name>Rosy</Name>
<Gender>Female</Gender>
<TotalMarks>900</TotalMarks>
</Student>
<Student Id='103'>
<Name>Pam</Name>
<Gender>Female</Gender>
<TotalMarks>850</TotalMarks>
</Student>
<Student Id='104'>
<Name>John</Name>
<Gender>Male</Gender>
<TotalMarks>950</TotalMarks>
</Student>
</Student> //WHAT IS IT?
<Student Id='105'>
<Name>Todd</Name>
<Gender>Male</Gender>
<TotalMarks>980</TotalMarks>
</Student>
</Students>
Проверьте этот https://dotnetfiddle.net/14js9r. Он работает без ошибок с правильным xml.
Спасибо, я всегда смотрел на свой код, а не на свой XML-документ, удаление обеих неправильных строк устранило мою проблему.
Лучше всего проверять шаг за шагом. Сначала в элементе «Студенты», затем в «Студенте» и т. д., пока вы не получите значение null для своей переменной. Кстати, я думаю, что у вас есть элемент студента дважды, поэтому он останавливается на первом, и вы хотите пройти на втором.