我尝试使用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;
我屏蔽了一些内容,但你明白了。
获得响应后,我使用StreamReader读取xml并将其放入XMLDocument。
XmlDocument myXMLDocument = new XmlDocument();
GridView1.DataSource = myXMLDocument;
StreamReader myXMLReader = new StreamReader(response.GetResponseStream());
ds.ReadXml(myXMLReader);
GridView1.DataSource = ds.Tables["str"];
GridView1.DataBind();
&#13;
之后我将它加载到DataSet中并绑定表&#34; str&#34;生成此结果的Gridview
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;
现在,问题是,我在网格视图中组织内容时遇到问题。它只将列名识别为字段名。我希望能够将信息组织成更典型的搜索格式,例如
创建日期 - &#34;此后标题为&#34;
作者姓名
但我无法操纵这些东西,因为它们不被视为领域。所以我的首要问题。如何使用gridview,以便我可以根据属性而不是数据集中的列名进行操作?我是否必须以不同方式将其绑定到网格?是否需要编码(如文档ID)?我不太关心我只需要能够做到的方法。
答案 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