Я полный новичок, мне нужно получить значение последнего идентификатора в файле XML, вот
Если вы делаете каждый шаг за раз, вы можете задать действительно конкретный вопрос о шаге, который вызывает у вас проблему. Вам также необходимо подумать о том, что вы хотите сделать, если идентификатор не является целым числом или отсутствует - глядя на ваш существующий XML-документ, это может происходить довольно часто.
У вас уже есть отсутствующие и повторяющиеся идентификаторы .... И последний идентификатор не самый высокий. Четко сформулируйте свои спецификации.
Эти случайные идентификаторы с yeppp и т. д. Были с того момента, когда я их тестировал, и удалил их.





Как предложил Джон, здесь вы можете использовать Linq To XML.
XElement books = XElement.Load(filePath);
var lastId = books.Descendants("book").Select(x=>Int32.Parse(x.Attribute("ID").Value)).Last();
Это даст вам последний идентификатор в текущем списке. Теперь вы можете создать свой новый узел.
books.Add(new XElement("book",new XAttribute("ID",(lastId+1).ToString()),
new XAttribute("title","New Title"),
new XAttribute("price","1234")));
books.Save(filePath);
Я получаю «Ссылка на объект не установлена на экземпляр объекта». ошибка в var lastId = books.Descendants ("book"). Select (x => int.Parse (x.Attribute ("ID"). Value)). Last ();
Это странно, надеюсь, ваш xml по-прежнему такой же, как в OP? а у вас есть экземпляр книги как в первой строке? Кроме того, случаи атрибутов остались прежними. ("Я БЫ" )
Вы также можете использовать XPath в Xml DOM следующим образом:
string title;
XmlDocument xml = new XmlDocument();
xml.Load("~/purchases.xml");
// Or any other method to load your xml data in the XmlDocument.
// For example if your xml data are in a string, use the LoadXml method.
XmlElement elt = xml.SelectSingleNode("//SubMenu[@id='1']") as XmlElement;
if (elt!=null)
{
name=elt.GetAttribute("title");
}
XmlDocument doc = new XmlDocument();
doc.Load("Yourxmlfilepath.xml");
//Display all the book titles.
XmlNodeList xNodeList = doc.SelectNodes("/bookstore/book");
foreach (XmlNode xNode in xNodeList)
{
var employeeName = xNode.OuterXml;
XmlDocument docnew = new XmlDocument();
docnew.LoadXml(employeeName);
foreach (XmlElement report in docnew.SelectNodes("book"))
{
string ID = report.GetAttribute("ID");
string title = report.GetAttribute("title");
string quantity = report.GetAttribute("quantity");
string price = report.GetAttribute("price");
}
}
Хотя XmlDocument, безусловно, будет работать, я бы рекомендовал вместо этого использовать LINQ to XML - XDocument и т. д. Это гораздо более удобный API. Я бы рекомендовал разбить задачу на этапы: 1) Загрузить документ; 2) найти последний элемент (а может, все элементы?); 3) Преобразуйте атрибут ID в целое число (вы можете просто преобразовать его в int с помощью LINQ to XML); 4) Создайте новый элемент с новым ID; 5) добавить в документ новый элемент; 6) сохраните документ. Я бы рекомендовал сделать это в консольном приложении, которое проще, чем графический интерфейс.