Как получить атрибут из файла XML в C#

Я полный новичок, мне нужно получить значение последнего идентификатора в файле XML, вот

Хотя XmlDocument, безусловно, будет работать, я бы рекомендовал вместо этого использовать LINQ to XML - XDocument и т. д. Это гораздо более удобный API. Я бы рекомендовал разбить задачу на этапы: 1) Загрузить документ; 2) найти последний элемент (а может, все элементы?); 3) Преобразуйте атрибут ID в целое число (вы можете просто преобразовать его в int с помощью LINQ to XML); 4) Создайте новый элемент с новым ID; 5) добавить в документ новый элемент; 6) сохраните документ. Я бы рекомендовал сделать это в консольном приложении, которое проще, чем графический интерфейс.

Jon Skeet 17.12.2018 08:54

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

Jon Skeet 17.12.2018 08:55

У вас уже есть отсутствующие и повторяющиеся идентификаторы .... И последний идентификатор не самый высокий. Четко сформулируйте свои спецификации.

bommelding 17.12.2018 09:00

Эти случайные идентификаторы с yeppp и т. д. Были с того момента, когда я их тестировал, и удалил их.

Ron Jeremy 17.12.2018 09:06
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
4
769
3

Ответы 3

Как предложил Джон, здесь вы можете использовать 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 ();

Ron Jeremy 18.12.2018 01:35

Это странно, надеюсь, ваш xml по-прежнему такой же, как в OP? а у вас есть экземпляр книги как в первой строке? Кроме того, случаи атрибутов остались прежними. ("Я БЫ" )

Anu Viswan 18.12.2018 01:45

Вы также можете использовать 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");

            }


        }

Другие вопросы по теме