如何在.NET中读取XML?
XML noob在这里! 所以我有一些XML数据:
<DataChunk> <ResponseChunk> <errors> <error code=\"0\"> Something happened here: Line 1, position 1. </error> </errors> </ResponseChunk> </DataChunk>
如何获得“错误”列表,我可以访问“错误代码”和下面的文本描述? 另外,我在c#中使用.net4.0 …谢谢!
将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
获取包含该xpath中所有元素的XmlNodeList
。 例如:
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; }
选项2
如果您有XML的XML模式,您可以将模式绑定到类(使用.NET xsd.exe工具)。 一旦你有了,你可以将XML反序列化成一个对象,并使用该对象而不是原始的XML。 这本身就是一个完整的主题,所以如果你有架构,这是值得研究的。
您可以使用Linq到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 }
如果您的inputXML 非常大 ,那么使用XMLReader
浏览文档可能会更好。
XmlReader xmlReader = XmlReader.Create(new StringReader(response)); AmortizationCalculatorBE amortization = new AmortizationCalculatorBE(); List<PaymentCalculator> paymentList = new List<PaymentCalculator>(); 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; }