Leer el atributo XML usando XmlDocument

¿Cómo puedo leer un atributo XML usando XmlDocument de C #?

Tengo un archivo XML que se parece a esto:

    

¿Cómo leería los atributos XML SuperNumber y SuperString?

Actualmente estoy usando XmlDocument, y obtengo los valores intermedios usando XmlDocument’s GetElementsByTagName() y eso funciona muy bien. Simplemente no puedo entender cómo obtener los atributos.

 XmlNodeList elemList = doc.GetElementsByTagName(...); for (int i = 0; i < elemList.Count; i++) { string attrVal = elemList[i].Attributes["SuperString"].Value; } 

Deberías mirar en XPath . Una vez que empiece a usarlo, verá que es mucho más eficiente y fácil de codificar que iterar a través de las listas. También le permite obtener directamente las cosas que desea.

Entonces el código sería algo similar a

 string attrVal = doc.SelectSingleNode("/MyConfiguration/@SuperNumber").Value; 

Tenga en cuenta que XPath 3.0 se convirtió en una Recomendación W3C el 8 de abril de 2014.

Puede migrar a XDocument en lugar de XmlDocument y luego usar Linq si prefiere esa syntax. Algo como:

 var q = (from myConfig in xDoc.Elements("MyConfiguration") select myConfig.Attribute("SuperString").Value) .First(); 

Tengo un Xml File books.xml

    

Progtwig:

 XmlDocument doc = new XmlDocument(); doc.Load("D:/siva/books.xml"); XmlNodeList elemList = doc.GetElementsByTagName("ID"); for (int i = 0; i < elemList.Count; i++) { string attrVal = elemList[i].Attributes["Definition"].Value; } 

Ahora, attrVal tiene el valor de ID .

XmlDocument.Attributes quizás? (Que tiene un método GetNamedItem que presumiblemente hará lo que quieras, aunque siempre he iterado la colección de atributos)

Suponiendo que su documento de ejemplo está en la variable de cadena doc

 > XDocument.Parse(doc).Root.Attribute("SuperNumber") 1 

Si su XML contiene espacios de nombres, puede hacer lo siguiente para obtener el valor de un atributo:

 var xmlDoc = new XmlDocument(); // content is your XML as string xmlDoc.LoadXml(content); XmlNamespaceManager nsmgr = new XmlNamespaceManager(new NameTable()); // make sure the namespace identifier, URN in this case, matches what you have in your XML nsmgr.AddNamespace("ns", "urn:oasis:names:tc:SAML:2.0:protocol"); // get the value of Destination attribute from within the Response node with a prefix who's identifier is "urn:oasis:names:tc:SAML:2.0:protocol" using XPath var str = xmlDoc.SelectSingleNode("/ns:Response/@Destination", nsmgr); if (str != null) { Console.WriteLine(str.Value); } 

Más sobre espacios de nombres XML aquí y aquí .