查询XML文件使用LINQ记录 [英] Query Xml File for Records using Linq

查看:127
本文介绍了查询XML文件使用LINQ记录的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

以下是我的XML文件。我得字段为每个页面并以逗号分隔字符串中的每个型号提及。请帮助如何使用LINQ进行

例如:如果我想类型= customFields为第1页规定,必须得到以逗号分隔的输出
专案编号,雇员,EmployeeName,hasExpiration等

 <网页和GT;
 <页面名称=第1页>
<类型的typeid =customfields>
  <外勤及GT;专案编号< /场及GT;
  <外勤及GT;雇员< /场及GT;
  <外勤及GT; EmployeeName< /场及GT;
  <外勤及GT; HasExpiration< /场及GT;
  <外勤及GT;结束日期和LT; /场及GT;
< /型号>
<类型的typeid =Directfields>
  <外勤及GT;专案编号< /场及GT;
  <外勤及GT;雇员< /场及GT;
  <外勤及GT; EmployeeName< /场及GT;
  <外勤及GT; HasExpiration< /场及GT;
  <外勤及GT;结束日期和LT; /场及GT;
  <外勤及GT; IsInUpdateMode< /场及GT;
  <外勤及GT; TimesheetSpendLimit< /场及GT;
< /型号>
 < /页>
  <页面名称=第2页>
    <类型的typeid =customfields>
  <外勤及GT;专案编号< /场及GT;
  <外勤及GT;雇员< /场及GT;
  <外勤及GT; EmployeeName< /场及GT;
  <外勤及GT; HasExpiration< /场及GT;
  <外勤及GT;结束日期和LT; /场及GT;
  <外勤及GT; IsInUpdateMode< /场及GT;
  <外勤及GT; TimesheetSpendLimit< /场及GT;
< /型号>
<类型的typeid =Directfields>
  <外勤及GT;专案编号< /场及GT;
  <外勤及GT;雇员< /场及GT;
  <外勤及GT; EmployeeName< /场及GT;
  <外勤及GT; HasExpiration< /场及GT;
  <外勤及GT;结束日期和LT; /场及GT;
  <外勤及GT; IsInUpdateMode< /场及GT;
  <外勤及GT; TimesheetSpendLimit< /场及GT;
< /型号>
  < /页>
< /页>


解决方案

您可以做到这一点是这样的:

  VAR结果=从在element.Descendants(页面)
             从B在a.Descendants(类型)
             新选择
             {
               页= a.Attribute(姓名)。价值,
               类型= b.Attribute(typeid的)。价值,
               字段=的string.join(,,b.Elements(田)选择(X => x.Value))
             };
的foreach(在结果VAR项)
{
  Console.WriteLine(的String.Format(页= {0}:类型= {1}:字段:{2},item.Page,项目。形式,item.Fields));
}

工作FIDDLE

检查我的本博客文章以及更多。

Following is my xml file . I have to get Fields mentioned for each page and for each Type in comma separated string. Please help in how to proceed using Linq

Example : If I want "Type = customFields" defined for "page1" , have to get output in comma separated ProjectID,EmployeeID,EmployeeName,hasExpiration etc

<Pages>
 <Page Name="Page1" >
<Type TypeID="customfields">
  <Field>ProjectID</Field>
  <Field>EmployeeID</Field>
  <Field>EmployeeName</Field>
  <Field>HasExpiration</Field>
  <Field>EndDate</Field>
</Type>
<Type TypeID="Directfields">
  <Field>ProjectID</Field>
  <Field>EmployeeID</Field>
  <Field>EmployeeName</Field>
  <Field>HasExpiration</Field>
  <Field>EndDate</Field>
  <Field>IsInUpdateMode</Field>
  <Field>TimesheetSpendLimit</Field>
</Type>
 </Page>
  <Page Name="Page2" >
    <Type TypeID="customfields">
  <Field>ProjectID</Field>
  <Field>EmployeeID</Field>
  <Field>EmployeeName</Field>
  <Field>HasExpiration</Field>
  <Field>EndDate</Field>
  <Field>IsInUpdateMode</Field>
  <Field>TimesheetSpendLimit</Field>
</Type>
<Type TypeID="Directfields">
  <Field>ProjectID</Field>
  <Field>EmployeeID</Field>
  <Field>EmployeeName</Field>
  <Field>HasExpiration</Field>
  <Field>EndDate</Field>
  <Field>IsInUpdateMode</Field>
  <Field>TimesheetSpendLimit</Field>
</Type>
  </Page>
</Pages>

解决方案

You can do it like this:

var Result = from a in element.Descendants("Page")
             from b in a.Descendants("Type")
             select new
             {
               Page = a.Attribute("Name").Value,
               Type = b.Attribute("TypeID").Value,
               Fields = String.Join(",", b.Elements("Field").Select(x => x.Value))
             };
foreach (var item in Result)
{
  Console.WriteLine(String.Format("Page = {0}:Type={1}:Fields:{2}", item.Page, item.Type, item.Fields));
}

WORKING FIDDLE

Check my this blog article as well for more.

这篇关于查询XML文件使用LINQ记录的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆