Предположим, что у меня есть следующий XML-документ.
<reply success="true">More nodes go here</reply>
Как получить значение успеха атрибута, который в этом случае будет строкой "true".
Предположим, что у меня есть следующий XML-документ.
<reply success="true">More nodes go here</reply>
Как получить значение успеха атрибута, который в этом случае будет строкой "true".
Я бы попробовал что-то вроде этого:
XmlDocument doc = new XmlDocument();
doc.LoadXml("<reply success=\"true\">More nodes go here</reply>");
XmlElement root = doc.DocumentElement;
string s = root.Attributes["success"].Value;
Если вы загружаете XML в XmlDocument, существует множество способов получить значение атрибута. Вы можете использовать XPath для поиска атрибута:
XmlAttribute a = doc.SelectSingleNode("/reply/@success");
Console.Write(a.Value);
Если у вас уже есть XmlElement, в котором появляется атрибут (который в этом случае является элементом документа), вы можете просто использовать GetAttribute:
Console.Write(doc.DocumentElement.GetAttribute("success"));
Существуют аналогичные подходы, если вы используете XPathDocument или XmlReader или XDocument.
Во всех случаях, однако, вы хотите получить атрибут по его имени, а не по своей позиции. В вашем тестовом примере есть только один атрибут; в любом реальном приложении могут присутствовать несколько атрибутов, а упорядочение атрибутов в XML незначительно. Эти два элемента семантически эквивалентны:
<a foo='true' bar='false'/>
<a bar='false' foo='true'/>
Вы даже не знаете, что синтаксический анализатор XML будет предоставлять вам атрибуты в том же порядке, в каком они появляются в документе; в зависимости от реализации парсер может предоставить их вам в алфавитном порядке или в случайном порядке. (Я видел оба.)
    using System;
    using System.Linq;
    using System.Xml.Linq;
    class MyClass
    {
        static void Main(string[] args)
        {
            XElement xmlcode =
            XElement.Parse("<reply success=\"true\">More nodes go  </reply>");
            var successAttributes =
                from attribute in xmlcode.Attributes()
                where attribute.Name.LocalName=="success" 
                select attribute ;
            if(successAttributes.Count()>0)
            foreach (var sa in successAttributes)
            {
                Console.WriteLine(sa.Value);           
            }
            Console.ReadLine();
        }
    }
var at = 
XElement.Parse("<reply success=\"true\">More nodes go  </reply>").Attribute("success");
if (at != null) Console.Write(at.Value);
Следующий код работает для меня.
String strXML = "<reply success=\"true\">More nodes go here</reply>";
    using (XmlReader reader = XmlReader.Create(new StringReader(strXML)))
    {
            reader.ReadToFollowing("reply");
            reader.MoveToContent();
            string strValue = reader.GetAttribute("success");
            Console.WriteLine(strValue);
    }
    string x="<node1 id='12345'><node2 Name='John'></node2><node3 name='abc'></node3></node1>";
    XmlDocument xml = new XmlDocument();
    xml.LoadXml(x);
    var node = xml.GetElementsByTagName("node3");
    xml = new XmlDocument();
    xml.LoadXml(nodes[0].OuterXml);
    XmlElement root = xml.DocumentElement;
    String requiredValue = root.GetAttribute("name");  
returns "abc";      
Здесь альтернативное решение, использующее XmlReader, которое может быть немного более эффективным, чем использование XmlDoument, хотя это может оказаться незначительным на таком маленьком XML-документе
string input = "<reply success=\"true\">More nodes go here</reply>";
using (XmlReader xmlReader = XmlReader.Create(new StringReader(input)))
{
    xmlReader.MoveToContent();
    string success = xmlReader.GetAttribute("success");
    Console.WriteLine(success);
}