¿Cómo se lee el valor de atributo de XmlNode en C #?

Supongamos que tengo un XmlNode y quiero obtener el valor de un atributo llamado “Nombre”. ¿Cómo puedo hacer eso?

XmlTextReader reader = new XmlTextReader(path); XmlDocument doc = new XmlDocument(); XmlNode node = doc.ReadNode(reader); foreach (XmlNode chldNode in node.ChildNodes) { **//Read the attribute Name** if (chldNode.Name == Employee) { if (chldNode.HasChildNodes) { foreach (XmlNode item in node.ChildNodes) { } } } } 

Documento XML:

     

Prueba esto:

 string employeeName = chldNode.Attributes["Name"].Value; 

Para expandir la solución de Konamiman (incluidas todas las comprobaciones nulas relevantes), esto es lo que he estado haciendo:

 if (node.Attributes != null) { var nameAttribute = node.Attributes["Name"]; if (nameAttribute != null) return nameAttribute.Value; throw new InvalidOperationException("Node 'Name' not found."); } 

puede recorrer todos los atributos como lo hace con los nodos

 foreach (XmlNode item in node.ChildNodes) { // node stuff... foreach (XmlAttribute att in item.Attributes) { // attribute stuff } } 

si todo lo que necesitas son los nombres, utiliza xpath en su lugar. No es necesario que hagas la iteración tú mismo y verifique si es nulo.

 string xml = @"      "; var doc = new XmlDocument(); //doc.Load(path); doc.LoadXml(xml); var names = doc.SelectNodes("//Employee/@name"); 

Utilizar

 item.Attributes["Name"].Value; 

para obtener el valor

Si usa chldNode como XmlElement lugar de XmlNode , puede usar

 var attributeValue = chldNode.GetAttribute("Name"); 

El valor de retorno solo será una cadena vacía , en caso de que el nombre del atributo no exista.

Entonces su ciclo podría verse así:

 XmlDocument document = new XmlDocument(); var nodes = document.SelectNodes("//Node/N0de/node"); foreach (XmlElement node in nodes) { var attributeValue = node.GetAttribute("Name"); } 

Esto seleccionará todos los nodos rodeados por tags y, posteriormente, recorrerá y leerá el atributo “Nombre”.

También puedes usar esto;

 string employeeName = chldNode.Attributes().ElementAt(0).Name 

Otra solución más:

 string s = "??"; // or whatever if (chldNode.Attributes.Cast() .Select(x => x.Value) .Contains(attributeName)) s = xe.Attributes[attributeName].Value; 

También evita la excepción cuando el atributo esperado attributeName realidad no existe.