valor obtener nombre nodos nodo modificar leer lectura especifico ejemplos atributo agregar c# .net xml-parsing xmlnode

c# - nodos - Obtener valor del nodo con el mismo nombre



obtener valor de un nodo xml c# (3)

Me gustaría recuperar información de un archivo XML, sin embargo, la forma en que está formateado es bastante extraño. Aquí está...

<?xml version="1.0"?> <Careers> <CareerList> <CareerName></CareerName> <CareerDescription></CareerDescription> </CareerList> <CareerList> <CareerName>Cook</CareerName> <CareerDescription>Cooks food for people</CareerDescription> </CareerList> </Careers>

Me gustaría obtener el 2º valor, que sería Cook y la descripción que es comida de Cook para las personas, pero en cambio solo obtengo el nodo vacío. Por ejemplo...

public string CareerDescription(string CareerFile) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(CareerFile); string Description = xmlDoc.SelectSingleNode("Careers/CareerList/CareerDescription").InnerText; return Description; }

¿Cómo seleccionaría el segundo nodo en lugar del primero?


En lugar de SelectSingleNode , debe usar SelectNodes : devolverá XmlNodeList nodeList . Luego debe tomar el texto InnerText del elemento de esa lista de nodos con índice [1];

public string CareerDescription(string CareerFile) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(CareerFile); string Description = xmlDoc.SelectNodes("Careers/CareerList/CareerDescription")[1].InnerText; return Description; }

Consulte la documentación de este método en MSDN para obtener más detalles: http://msdn.microsoft.com/en-us/library/system.xml.xmlnode.selectnodes%28v=vs.71%29.aspx


Puede usar un índice en su expresión XPath:

xmlDoc.SelectSingleNode("Careers/CareerList[2]/CareerDescription").InnerText

Personalmente, usaría LINQ to XML en su lugar, pero:

var doc = XDocument.Load(CareerFile); return doc.Root .Elements("CareerList") .ElementAt(1) // 0-based .Element("CareerDescription") .Value;


Simplemente una forma directa de rutina LINQ a XML (y porque es LINQ, prefiero mucho más que el uso "estándar" de XmlDocument con el soporte de XPath):

return XDocument.Load(CareerFile) .Descendants("CareerDescription").Skip(1).First().Value;