Noob XML ici! J’ai donc des données XML:
Something happened here: Line 1, position 1.
Comment puis-je obtenir la liste des “erreurs” où je peux avoir access au “code d’erreur” et à la description textuelle suivante …? De plus, j’utilise .net4.0 en c # … merci!
Chargez le fichier XML dans un document XmlDocument
, puis utilisez les requêtes xpath pour extraire les données dont vous avez besoin.
Par exemple
XmlDocument doc = new XmlDocument(); doc.LoadXml(xmlssortingng); XmlNode errorNode = doc.DocumentElement.SelectSingleNode("/DataChunk/ResponseChunk/Errors/error"); ssortingng errorCode = errorNode.Atsortingbutes["code"].Value; ssortingng errorMessage = errorNode.InnerText;
S’il existe un risque que le XML ait plusieurs éléments d’erreur, vous pouvez utiliser SelectNodes
pour obtenir un XmlNodeList
contenant tous les éléments de ce xpath. Par exemple:
XmlDocument doc = new XmlDocument(); doc.LoadXml(xmlssortingng); XmlNodeList errorNodes = doc.DocumentElement.SelectNodes("/DataChunk/ResponseChunk/Errors/error"); foreach(XmlNode errorNode in errorNodes) { ssortingng errorCode = errorNode.Atsortingbutes["code"].Value; ssortingng errorMessage = errorNode.InnerText; }
Option 2
Si vous disposez d’un schéma XML pour le fichier XML, vous pouvez le lier à une classe (à l’aide de l’outil .NET xsd.exe). Une fois que vous avez cela, vous pouvez désérialiser le XML en un object et le manipuler à partir de cet object plutôt que le XML brut. C’est un sujet entier en lui-même, donc si vous avez le schéma, cela vaut la peine de l’examiner.
Vous pouvez utiliser Linq to XML :
var doc = XDocument.Parse(xml); var errors = from e in doc.Descendants("error") select new { code = e.Atsortingbute("code").Value, msg = e.Value.Trim() }; foreach (var e in errors) { // use e.code & e.msg }
Si votre XML d’entrée est très volumineux , il serait peut-être préférable de parcourir le document avec un XMLReader
.
XmlReader xmlReader = XmlReader.Create(new SsortingngReader(response)); AmortizationCalculatorBE amortization = new AmortizationCalculatorBE(); List paymentList = new List (); XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(new SsortingngReader(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; }