当前位置: 代码迷 >> C# >> XML解析 xml to linq ,解析SOLR的统计结果,该如何处理
  详细解决方案

XML解析 xml to linq ,解析SOLR的统计结果,该如何处理

热度:217   发布时间:2016-05-05 02:48:24.0
XML解析 xml to linq ,解析SOLR的统计结果
第一次使用solr,现在需要做统计。下面是我得到的结果。我怎么样才能得到年代统计的数据了。求帮下吗,XML处理方面不行。搞了一个上午也没出来



<response>

<lst name="responseHeader">
  <int name="status">0</int>
  <int name="QTime">11</int>
  <lst name="params">
    <str name="q">*:*</str>
    <str name="facet.field">years</str>
    <str name="indent">true</str>
    <str name="fl">score</str>
    <str name="wt">xml</str>
    <str name="facet">true</str>
  </lst>
</lst>
<result name="response" numFound="155612" start="0" maxScore="1.0">
  <doc>
    <float name="score">1.0</float></doc>
  <doc>
    <float name="score">1.0</float></doc>
  <doc>
    <float name="score">1.0</float></doc>
  <doc>
    <float name="score">1.0</float></doc>
  <doc>
    <float name="score">1.0</float></doc>
  <doc>
    <float name="score">1.0</float></doc>
  <doc>
    <float name="score">1.0</float></doc>
  <doc>
    <float name="score">1.0</float></doc>
  <doc>
    <float name="score">1.0</float></doc>
  <doc>
    <float name="score">1.0</float></doc>
</result>
<lst name="facet_counts">
  <lst name="facet_queries"/>
  <lst name="facet_fields">
    <lst name="years">
      <int name="2011">21601</int>
      <int name="2010">17999</int>
      <int name="2009">14807</int>
      <int name="2008">11671</int>
      <int name="2007">11004</int>
      <int name="2006">8826</int>
      <int name="2005">7867</int>
      <int name="2004">6533</int>
      <int name="2001">4460</int>
      <int name="1997">3871</int>
      <int name="1996">3742</int>
      <int name="1994">3602</int>
      <int name="1995">3587</int>
      <int name="1991">3576</int>
      <int name="1993">3478</int>
      <int name="1990">3412</int>
      <int name="1986">3328</int>
      <int name="1989">3047</int>
      <int name="1987">2930</int>
      <int name="1988">2800</int>
      <int name="2003">2703</int>
      <int name="1992">2073</int>
      <int name="2012">1806</int>
      <int name="2002">1630</int>
      <int name="2000">1610</int>
      <int name="1998">1436</int>
      <int name="2013">1296</int>
      <int name="1999">892</int>
    </lst>
  </lst>
  <lst name="facet_dates"/>
  <lst name="facet_ranges"/>
  <lst name="facet_intervals"/>
  <lst name="facet_heatmaps"/>
</lst>
</response>

------解决思路----------------------
string xml = @"<response>
<lst name=""responseHeader"">
<int name=""status"">0</int>
<int name=""QTime"">11</int>
<lst name=""params"">
<str name=""q"">*:*</str>
<str name=""facet.field"">years</str>
<str name=""indent"">true</str>
<str name=""fl"">score</str>
<str name=""wt"">xml</str>
<str name=""facet"">true</str>
</lst>
</lst>
<result name=""response"" numFound=""155612"" start=""0"" maxScore=""1.0"">
<doc>
<float name=""score"">1.0</float></doc>
<doc>
<float name=""score"">1.0</float></doc>
<doc>
<float name=""score"">1.0</float></doc>
<doc>
<float name=""score"">1.0</float></doc>
<doc>
<float name=""score"">1.0</float></doc>
<doc>
<float name=""score"">1.0</float></doc>
<doc>
<float name=""score"">1.0</float></doc>
<doc>
<float name=""score"">1.0</float></doc>
<doc>
<float name=""score"">1.0</float></doc>
<doc>
<float name=""score"">1.0</float></doc>
</result>
<lst name=""facet_counts"">
<lst name=""facet_queries""/>
<lst name=""facet_fields"">
<lst name=""years"">
<int name=""2011"">21601</int>
<int name=""2010"">17999</int>
<int name=""2009"">14807</int>
<int name=""2008"">11671</int>
<int name=""2007"">11004</int>
<int name=""2006"">8826</int>
<int name=""2005"">7867</int>
<int name=""2004"">6533</int>
<int name=""2001"">4460</int>
<int name=""1997"">3871</int>
<int name=""1996"">3742</int>
<int name=""1994"">3602</int>
<int name=""1995"">3587</int>
<int name=""1991"">3576</int>
<int name=""1993"">3478</int>
<int name=""1990"">3412</int>
<int name=""1986"">3328</int>
<int name=""1989"">3047</int>
<int name=""1987"">2930</int>
<int name=""1988"">2800</int>
<int name=""2003"">2703</int>
<int name=""1992"">2073</int>
<int name=""2012"">1806</int>
<int name=""2002"">1630</int>
<int name=""2000"">1610</int>
<int name=""1998"">1436</int>
<int name=""2013"">1296</int>
<int name=""1999"">892</int>
</lst>
</lst>
<lst name=""facet_dates""/>
<lst name=""facet_ranges""/>
<lst name=""facet_intervals""/>
<lst name=""facet_heatmaps""/>
</lst>
</response>";
XElement root = XElement.Parse(xml);
var ele = root.Elements("lst").Where(e => e.Attribute("name").Value == "facet_counts").Single().Elements("lst").Where(e => e.Attribute("name").Value == "facet_fields").Single().Element("lst");
foreach (var e in ele.Elements())
{
    Console.WriteLine(e);
    Console.WriteLine("**********");
}

------解决思路----------------------


            XmlDocument doc = new XmlDocument();
            doc.LoadXml(xml);
            var nolist = doc.SelectNodes("//lst[@name='years']/int");



用xpath解析特定的满快的。
  相关解决方案