求助Linq to XML的问题

lostfox9 2011-10-31 01:20:52
有一段XML数据,怎么用Linq查询,并让GridView显示?我自己做的显示效果特别差,数据都乱套了。只想从第2

个ROW开始显示,第二个ROW里的data内容显示为GridView的表头(好比就是数据库的字段名),第三个ROW里的

data内容显示为GridView的数据,并且跟表头的数据项对应(对应各字段显示)。

XML的代码如下:

<Method>
<Value>
<Row>
<Data>调用成功</Data>
<Data/>
<Data/>
<Data/>
<Data/>
<Data/>
<Data/>
<Data/>
<Data/>
<Data/>
<Data/>
<Data/>
<Data/>
</Row>
<Row>
<Data>用户ID</Data>
<Data>用户名</Data>
<Data>密码</Data>
<Data>Email</Data>
<Data>问题1</Data>
<Data>答案1</Data>
<Data>问题2</Data>
<Data>答案2</Data>
<Data>注册时间</Data>
<Data>登陆IP</Data>
<Data>电话</Data>
<Data>角色</Data>
<Data>状态</Data>
</Row>
<Row>
<Data>122</Data>
<Data>测试用户</Data>
<Data>123456</Data>
<Data>test@163.com</Data>
<Data>出生地是哪里?</Data>
<Data>某某地方</Data>
<Data>电话号码是多少?</Data>
<Data>545485482</Data>
<Data>2011-08-10</Data>
<Data>124.68.56.201</Data>
<Data>13333333333</Data>
<Data>普通用户</Data>
<Data>正常</Data>
</Row>
</Value>
</Method>


...全文
96 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
阿非 2011-10-31
  • 打赏
  • 举报
回复
如果说的不显示是指GridView中不显示,那就设置 对应列 Visible 属性


不能放 Session 里,可以放 Cache 中
lostfox9 2011-10-31
  • 打赏
  • 举报
回复
实在是不好意思,就这么一个Linq的问题又展开了许多的小问题,麻烦您了。谢谢了。
lostfox9 2011-10-31
  • 打赏
  • 举报
回复
哦,看懂了,原来是三元运算符,我还以为三元只能写成 ? : 呢。

刚才回复了三次,不让回,其实还有一个比较重要的问题

我只想显示ROW里的某几个数据,例如:用户ID和密码这两个字段不想让显示,有办法跳过吗?

还有就是在我的小程序里是调用某个接口返回了这段XML数据,返回的数据比较详细,我想在页面上以GridView呈现比较简单的数据,用户点击链接详细信息的时候才显示所有的详细信息,问题是,把这段XML格式的字符存入到用户的Session里,然后用户点击详情的时候只需Linq再次对这段XML查询就可以了,不需要再次访问那个接口等待返回XML,这样做可以吗?那么一大段XML放到Session里会不会影响性能?
阿非 2011-10-31
  • 打赏
  • 举报
回复
?? 是 空结合运算符
q107770540 2011-10-31
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 lostfox9 的回复:]
还有个问题上次问你,你没解答,

.Select(q=>q.Value??" ")


你写的这段代码我看不懂,能解释下吗?
[/Quote]
q.Value??" "
这是个三元运算符,相当于:
q.Value==null?"":q.Value
或者:
if(q.Vlaue==null)
{
return "";
}
else return q.Value;
q107770540 2011-10-31
  • 打赏
  • 举报
回复

void Main()
{
XDocument xml=XDocument.Parse(@"<Method>
<Value>
<Row>
<Data>调用成功</Data>
<Data/>
<Data/>
<Data/>
<Data/>
<Data/>
<Data/>
<Data/>
<Data/>
<Data/>
<Data/>
<Data/>
<Data/>
</Row>
<Row>
<Data>用户ID</Data>
<Data>用户名</Data>
<Data>密码</Data>
<Data>Email</Data>
<Data>问题1</Data>
<Data>答案1</Data>
<Data>问题2</Data>
<Data>答案2</Data>
<Data>注册时间</Data>
<Data>登陆IP</Data>
<Data>电话</Data>
<Data>角色</Data>
<Data>状态</Data>
</Row>
<Row>
<Data>122</Data>
<Data>测试用户</Data>
<Data>123456</Data>
<Data>test@163.com</Data>
<Data>出生地是哪里?</Data>
<Data>某某地方</Data>
<Data>电话号码是多少?</Data>
<Data>545485482</Data>
<Data>2011-08-10</Data>
<Data>124.68.56.201</Data>
<Data>13333333333</Data>
<Data>普通用户</Data>
<Data>正常</Data>
</Row>
</Value>
</Method>
");
var query=(from x in xml.Descendants("Row")
select x).Skip(1);
if(query!=null)
{
DataTable dt=new DataTable();
var data=query.First().Descendants("Data").Select(q=>q.Value??" ");

foreach(var d in data)
{
//此处如果判断较,建议你使用 switch ...case
if(d.Trim().Equals("用户名"))
{
dt.Columns.Add("UserName");
}
else if(d.Trim().Equals("密码"))
{
dt.Columns.Add("password");
}
else dt.Columns.Add(d);
}
var temp= query.Skip(1).Select(q=>q.Elements("Data").Select(s=>s.Value).ToArray());

temp.ToList().ForEach(q=>dt.Rows.Add(q.ToArray()));
Console.WriteLine(dt);
}

}



知识要慢慢积累,一口吃不成胖子
可以看看这本书:
http://topic.csdn.net/u/20101111/09/ea049af5-d079-4a13-8c1d-e1a3350a830d.html
lostfox9 2011-10-31
  • 打赏
  • 举报
回复
还有个问题上次问你,你没解答,

.Select(q=>q.Value??" ")


你写的这段代码我看不懂,能解释下吗?
lostfox9 2011-10-31
  • 打赏
  • 举报
回复
其实对方给我返回的XML数据很多都是英文的,所以我才要进行替换,某些值也是用其他字符代替的,所要都要进行判断和替换,这个是要在GridView的数据绑定事件里做的吗?
lostfox9 2011-10-31
  • 打赏
  • 举报
回复
又是兄弟你啊,你的知识在哪学的啊?我看的书是ASP.NET 4 高级编程,怎么书上都没有你的这些方法啊?你在哪学的啊?

还有一个问题没有解决,我想重命名某几个字段名怎么做?比如:字段名为用户名的我想改为UserName,密码我想想改为PassWord,这个要怎么做?
另外某些数据也需要做一些判断进行修改,例如:数据为“普通用户”,我要做一些判断,如果等于普通用户就显示“XXXX”,这个又要怎么做?
q107770540 2011-10-31
  • 打赏
  • 举报
回复
GridView.DataSource=dt;
GridView.DataBind();
q107770540 2011-10-31
  • 打赏
  • 举报
回复

void Main()
{
XDocument xml=XDocument.Parse(@"<Method>
<Value>
<Row>
<Data>调用成功</Data>
<Data/>
<Data/>
<Data/>
<Data/>
<Data/>
<Data/>
<Data/>
<Data/>
<Data/>
<Data/>
<Data/>
<Data/>
</Row>
<Row>
<Data>用户ID</Data>
<Data>用户名</Data>
<Data>密码</Data>
<Data>Email</Data>
<Data>问题1</Data>
<Data>答案1</Data>
<Data>问题2</Data>
<Data>答案2</Data>
<Data>注册时间</Data>
<Data>登陆IP</Data>
<Data>电话</Data>
<Data>角色</Data>
<Data>状态</Data>
</Row>
<Row>
<Data>122</Data>
<Data>测试用户</Data>
<Data>123456</Data>
<Data>test@163.com</Data>
<Data>出生地是哪里?</Data>
<Data>某某地方</Data>
<Data>电话号码是多少?</Data>
<Data>545485482</Data>
<Data>2011-08-10</Data>
<Data>124.68.56.201</Data>
<Data>13333333333</Data>
<Data>普通用户</Data>
<Data>正常</Data>
</Row>
</Value>
</Method>
");
var query=(from x in xml.Descendants("Row")
select x).Skip(1);
if(query!=null)
{
DataTable dt=new DataTable();
query.First().Descendants("Data").Select(q=>q.Value??" ")
.ToList().ForEach(q=>dt.Columns.Add(q));

query.Skip(1).Select(q=>q.Elements("Data").Select(s=>s.Value).ToArray())
.ToList().ForEach(q=>dt.Rows.Add(q.ToArray()));

}

}

8,497

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧