如何使用GridView按属性名称而不是DataSet列名显示XML Web响应

时间:2015-06-29 15:36:20

标签: c# asp.net xml gridview

我尝试使用ASP.Net表单GridView显示XML Web响应。我是.NET框架的新手,所以我正在努力解决一些细节问题。

我正在开发搜索引擎,因此XML响应是搜索特定短语或单词的结果。这是XML响应的示例



<response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">8</int>
<lst name="params">
<str name="qf">recordkey</str>
<str name="df">text</str>
<str name="echoParams">all</str>
<str name="indent">true</str>
<str name="wt">xml</str>
<str name="q">*:*</str>
</lst>
</lst>
<result name="response" numFound="281" start="0">
<doc>
<str name="Date Created">2014-10-30</str>
<str name="Facility">*****</str>
<str name="Author">*********</str>
<str name="Source System ID">*******</str>
<str name="Data Source">************</str>
<str name="Title">ENGINEERING INITIATION</str>
<long name="_version_">1504985395557826560</long>
</doc>
<doc>
<str name="Date Created">2011-09-30</str>
<str name="Facility">*********</str>
<str name="Author">************</str>
<str name="Source System ID">***</str>
<str name="Data Source">***************</str>
<str name="Title">USE OF REGISTERED....</str>
<long name="_version_">1504985395859816448</long>
</doc>
<doc>.....
  ...........
&#13;
&#13;
&#13;

我屏蔽了一些内容,但你明白了。

获得响应后,我使用StreamReader读取xml并将其放入XMLDocument。

&#13;
&#13;
  XmlDocument myXMLDocument = new XmlDocument();

            GridView1.DataSource = myXMLDocument; 

            StreamReader myXMLReader = new StreamReader(response.GetResponseStream());

            ds.ReadXml(myXMLReader);

            GridView1.DataSource = ds.Tables["str"];

            GridView1.DataBind();
&#13;
&#13;
&#13;

之后我将它加载到DataSet中并绑定表&#34; str&#34;生成此结果的Gridview

&#13;
&#13;
name	              str_Text	              lst_Id	doc_Id
qf                     recordkey                1	     
df                      text                    1	 
echoParams               all                    1	 
indent                  true                    1	 
wt                      xml                     1    	 
q                       *fire*                  1	 
Date Created          2014-10-30                          0
Facility                *****                             0
Author                  ****                              0
Source System ID        ***                               0
Data Source             ****                              0
Title                    ****                             0
Date Created         2011-09-30                           1
Facility                ****                              1
Author                  ****                              1
Source System ID        ****                              1
Data Source             *****                             1
Title               USE OF REGISTERED...                  1
Date Created        2011-11-03                            2
Facility                ****                              2
Author                 *****                              2
Source System ID        ***                               2
Data Source           *******                             2
Title                REQUEST...                           2
&#13;
&#13;
&#13;

现在,问题是,我在网格视图中组织内容时遇到问题。它只将列名识别为字段名。我希望能够将信息组织成更典型的搜索格式,例如

创建日期 - &#34;此后标题为&#34;

作者姓名

但我无法操纵这些东西,因为它们不被视为领域。所以我的首要问题。如何使用gridview,以便我可以根据属性而不是数据集中的列名进行操作?我是否必须以不同方式将其绑定到网格?是否需要编码(如文档ID)?我不太关心我只需要能够做到的方法。

1 个答案:

答案 0 :(得分:0)

您可以使用以下linq从数据集中提取数据

            var results = ds.Tables["str"].AsEnumerable()
                .Where(x => x.Field<string>("name") == "qf")
                .Select(y => y.Field<string>("str_Text"));​

我不认为上面的代码是最好的解决方案。我认为像文本文档一样逐行解析会得到更好的结果。尝试使用如下代码的树视图: Recursive adding XML into TreeView