Come leggere XML in .NET?

XML noob qui! Quindi ho alcuni dati xml:

    Something happened here: Line 1, position 1.     

Come posso ottenere un elenco di “errori” in cui posso accedere al “codice di errore” e alla descrizione del testo che segue …? Inoltre, sto usando .net4.0 in c # … grazie!

Caricare l’XML in un XmlDocument e quindi utilizzare le query xpath per estrarre i dati necessari.

Per esempio

 XmlDocument doc = new XmlDocument(); doc.LoadXml(xmlstring); XmlNode errorNode = doc.DocumentElement.SelectSingleNode("/DataChunk/ResponseChunk/Errors/error"); string errorCode = errorNode.Attributes["code"].Value; string errorMessage = errorNode.InnerText; 

Se esiste la possibilità che XML abbia più elementi di errore, è ansible utilizzare SelectNodes per ottenere un XmlNodeList che contenga tutti gli elementi in quel percorso xpath. Per esempio:

 XmlDocument doc = new XmlDocument(); doc.LoadXml(xmlstring); XmlNodeList errorNodes = doc.DocumentElement.SelectNodes("/DataChunk/ResponseChunk/Errors/error"); foreach(XmlNode errorNode in errorNodes) { string errorCode = errorNode.Attributes["code"].Value; string errorMessage = errorNode.InnerText; } 

opzione 2

Se si dispone di uno schema XML per XML, è ansible associare lo schema a una class (utilizzando lo strumento .NET xsd.exe). Una volta che hai, puoi deserializzare l’XML in un object e lavorare con esso da quell’object piuttosto che dall’XML grezzo. Questo è un argomento intero di per sé, quindi se hai lo schema che vale la pena esaminare.

Puoi usare Linq in XML :

 var doc = XDocument.Parse(xml); var errors = from e in doc.Descendants("error") select new { code = e.Attribute("code").Value, msg = e.Value.Trim() }; foreach (var e in errors) { // use e.code & e.msg } 

Se il tuo XML di input è molto grande , potrebbe essere meglio consultare il documento con XMLReader .

 XmlReader xmlReader = XmlReader.Create(new StringReader(response)); AmortizationCalculatorBE amortization = new AmortizationCalculatorBE(); List paymentList = new List(); XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(new StringReader(response)); XmlNodeList nodeList = xmlDoc.DocumentElement.SelectNodes("response/amortizationschedule/payment"); XmlNodeList nodeList2 = xmlDoc.DocumentElement.SelectNodes("response"); foreach (XmlNode node in nodeList) { PaymentCalculator payment = new PaymentCalculator(); payment.beginningbalance = node.SelectSingleNode("beginningbalance").InnerText; payment.principal = node.SelectSingleNode("principal").InnerText; payment.interest = node.SelectSingleNode("interest").InnerText; paymentList.Add(payment); } amortization._PaymentCalculator = paymentList; foreach (XmlNode node in nodeList2) { amortization.totalprincipal = node.SelectSingleNode("totalprincipal").InnerText; amortization.totalinterest = node.SelectSingleNode("totalinterest").InnerText; }