猿问

如何在.NET中读取XML?

XML菜鸟在这里!所以我有一些xml数据:


<DataChunk>

    <ResponseChunk>

        <errors>

            <error code=\"0\">

                Something happened here: Line 1, position 1.

            </error>

        </errors>

    </ResponseChunk>

</DataChunk>

我如何获得“错误”列表,可以在其中访问“错误代码”和下面的文本描述?另外,我在C#中使用.net4.0 ...谢谢!


万千封印
浏览 437回答 3
3回答

绝地无双

将XML加载到中XmlDocument,然后使用xpath查询提取所需的数据。例如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;如果XML可能具有多个错误元素,则可以SelectNodes用来获取一个XmlNodeList包含该xpath的所有元素的。例如:XmlDocument doc = new XmlDocument();doc.LoadXml(xmlstring);XmlNodeList errorNodes = doc.DocumentElement.SelectNodes("/DataChunk/ResponseChunk/Errors/error");foreach(XmlNode errorNode in errorNodes){&nbsp; string errorCode = errorNode.Attributes["code"].Value;&nbsp; string errorMessage = errorNode.InnerText;}选项2如果您具有XML的XML模式,则可以将模式绑定到类(使用.NET xsd.exe工具)。一旦有了它,就可以将XML反序列化为一个对象,然后从该对象而不是原始XML对其进行处理。这本身就是一个完整的主题,因此,如果您确实有该架构,则值得研究。

繁华开满天机

您可以使用Linq到XML:var doc = XDocument.Parse(xml);var errors = from e in doc.Descendants("error")&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;select new&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; code = e.Attribute("code").Value,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; msg = e.Value.Trim()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;};foreach (var e in errors){&nbsp; &nbsp; // use e.code & e.msg}但是,如果输入的XML 非常大,则最好使用来浏览文档XMLReader。

慕桂英4014372

XmlReader xmlReader = XmlReader.Create(new StringReader(response));&nbsp; &nbsp; &nbsp; &nbsp; AmortizationCalculatorBE amortization = new AmortizationCalculatorBE();List<PaymentCalculator> paymentList = new List<PaymentCalculator>();&nbsp; &nbsp; &nbsp; &nbsp; XmlDocument xmlDoc = new XmlDocument();&nbsp; &nbsp; &nbsp; &nbsp; xmlDoc.Load(new StringReader(response));&nbsp; &nbsp; &nbsp; &nbsp; XmlNodeList nodeList = xmlDoc.DocumentElement.SelectNodes("response/amortizationschedule/payment");&nbsp; &nbsp; &nbsp; &nbsp; XmlNodeList nodeList2 = xmlDoc.DocumentElement.SelectNodes("response");&nbsp; &nbsp; &nbsp; &nbsp; foreach (XmlNode node in nodeList)&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; PaymentCalculator payment = new PaymentCalculator();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; payment.beginningbalance = node.SelectSingleNode("beginningbalance").InnerText;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; payment.principal = node.SelectSingleNode("principal").InnerText;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; payment.interest = node.SelectSingleNode("interest").InnerText;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; paymentList.Add(payment);&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; amortization._PaymentCalculator = paymentList;&nbsp; &nbsp; &nbsp; &nbsp; foreach (XmlNode node in nodeList2)&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; amortization.totalprincipal = node.SelectSingleNode("totalprincipal").InnerText;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; amortization.totalinterest = node.SelectSingleNode("totalinterest").InnerText;&nbsp; &nbsp; &nbsp; &nbsp; }
随时随地看视频慕课网APP
我要回答