如何在C#中解析Solr分面结果并提取价格区间数据
在C#中提取Solr分面XML中的价格区间数值
没问题,我来帮你搞定这个!针对你拿到的Solr分面XML结果,下面是两种实用的C#解析方法,能轻松把cheap、average、expensive对应的数值提取到单独变量里:
方法一:使用LINQ to XML(推荐,代码更简洁)
这种方法需要引用System.Xml.Linq命名空间,利用LINQ语法快速定位节点:
// 假设你已经把XML内容加载到了字符串xmlString中 XDocument doc = XDocument.Parse(xmlString); // 定位到price节点下的各个int元素 int cheap = int.Parse(doc.Descendants("lst") .First(l => l.Attribute("name")?.Value == "price") .Elements("int") .First(e => e.Attribute("name")?.Value == "cheap") .Value); int average = int.Parse(doc.Descendants("lst") .First(l => l.Attribute("name")?.Value == "price") .Elements("int") .First(e => e.Attribute("name")?.Value == "average") .Value); int expensive = int.Parse(doc.Descendants("lst") .First(l => l.Attribute("name")?.Value == "price") .Elements("int") .First(e => e.Attribute("name")?.Value == "expensive") .Value);
如果担心节点可能不存在导致异常,可以用更安全的写法,结合int.TryParse避免崩溃:
var priceLst = doc.Descendants("lst") .FirstOrDefault(l => l.Attribute("name")?.Value == "price"); int cheap = 0; if (priceLst?.Elements("int").FirstOrDefault(e => e.Attribute("name")?.Value == "cheap") is XElement cheapElem) { int.TryParse(cheapElem.Value, out cheap); } // average和expensive可以用同样的安全逻辑处理
方法二:使用XmlDocument(传统DOM解析)
如果你习惯用传统的XmlDocument,也可以这样写,需要引用System.Xml命名空间:
XmlDocument doc = new XmlDocument(); doc.LoadXml(xmlString); // 先找到price节点 XmlNode priceNode = doc.SelectSingleNode("//lst[@name='price']"); // 提取各个数值 int cheap = int.Parse(priceNode.SelectSingleNode("int[@name='cheap']").InnerText); int average = int.Parse(priceNode.SelectSingleNode("int[@name='average']").InnerText); int expensive = int.Parse(priceNode.SelectSingleNode("int[@name='expensive']").InnerText);
同样,为了避免节点不存在的异常,建议添加空值判断:
XmlNode priceNode = doc.SelectSingleNode("//lst[@name='price']"); int cheap = 0; if (priceNode?.SelectSingleNode("int[@name='cheap']") is XmlNode cheapNode) { int.TryParse(cheapNode.InnerText, out cheap); } // average和expensive的安全处理逻辑一致
两种方法都能帮你快速拿到想要的数值,LINQ to XML的写法更现代简洁,XmlDocument则适合维护旧项目时使用~
内容的提问来源于stack exchange,提问作者Joseph
相关产品推荐
相关产品推荐

