3 回答

TA贡献1946条经验 获得超4个赞
将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)
{
string errorCode = errorNode.Attributes["code"].Value;
string errorMessage = errorNode.InnerText;
}
选项2
如果您具有XML的XML模式,则可以将模式绑定到类(使用.NET xsd.exe工具)。一旦有了它,就可以将XML反序列化为一个对象,然后从该对象而不是原始XML对其进行处理。这本身就是一个完整的主题,因此,如果您确实有该架构,则值得研究。

TA贡献1816条经验 获得超4个赞
您可以使用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
}
但是,如果输入的XML 非常大,则最好使用来浏览文档XMLReader。

TA贡献1871条经验 获得超13个赞
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;
}
- 3 回答
- 0 关注
- 436 浏览
添加回答
举报