Получить значение узла xml в виде строки C#

#c# #xml

#c# #xml

Вопрос:

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

 <currentvin value="1FTWW31R08EB18119" /> 
  

Кажется, я не могу понять, как получить это значение. Кстати, я не писал этот XML. До сих пор я пробовал несколько подходов, в том числе следующие:

     public void xmlParse(string filePath)
    {
        XmlDocument xml = new XmlDocument();
        xml.Load(filePath);
        XmlNode currentVin = xml.SelectSingleNode("/currentvin");
        string xmlVin = currentVin.Value;
        Console.WriteLine(xmlVin);          
    }
  

Что не работает. Затем я попытался:

     public void xmlParse(string filePath)
    {
        XmlDocument xml = new XmlDocument();
        xml.Load(filePath);
        string xmlVin = xml.SelectSingleNode("/currentvin").Value;
        Console.WriteLine(xmlVin);

    }
  

Но это тоже не работает. Я получаю исключение с нулевой ссылкой, в котором указывается, что ссылка на объект не установлена для экземпляра объекта. Есть идеи?

Комментарии:

1. К сожалению, XML-документ является собственностью, так что я не могу опубликовать полное содержимое. Спасибо за всю вашу помощь! Отличные предложения от всех. Я передам это другим в моем отделе, поскольку, похоже, нам придется решать это самостоятельно. 🙂

Ответ №1:

Я думаю, вы путаете Value свойство класса XmlNode с атрибутом XML с именем «value».

значение является атрибутом в вашем xml, поэтому либо измените свой запрос xpath на

 xml.SelectSingleNode("/currentvin/@value").Value
  

Или использовать Attributes коллекцию выбранного XmlNode.

Комментарии:

1. Я считаю, что это атрибут, который я ищу. К сожалению, этот код мне не помог. Я все еще получаю исключение нулевой ссылки.

2. Это все, что у вас есть в вашем XML-файле, только один узел? Вы уверены, что действительно загружаете XML-документ? Последнее, что лучше всего, это то, что ваш запрос XPATH неверен.

Ответ №2:

Вы ищете значение атрибута «value» (это несколько), а не значение самого узла, поэтому вам нужно использовать Attribute свойство:

 string xmlVin = xml.SelectSingleNode("/currentvin").Attributes["value"].Value;
  

Или в первой версии:

 XmlNode currentVin = xml.SelectSingleNode("/currentvin");
string xmlVin = currentVin.Attributes["value"].Value;
  

Комментарии:

1. Это похоже на то, что я пытаюсь получить, но они не сработали. Я все еще получаю исключение с нулевой ссылкой.

2. @admiral142: пожалуйста, отправьте свой полный XML-файл — если вы даже не получите узел, вы можете запросить его неправильно (т. Е. Неправильный путь или ваш XML может использовать пространство имен)

Ответ №3:

Если весь ваш XML содержит только этот узел, то это может быть xml.DocumentElement.Attributes["value"].Value;

Комментарии:

1. На самом деле в XML есть несколько узлов, я просто пытаюсь получить значение атрибута «value» в узле currentvin. 😛

2. Не могли бы вы предоставить полный пример XML-файла?