Linq to XML - 读取多个属性的值
Linq to XML - to read a values of multiple attributes
我正在尝试读取 XML 文件以连接特定属性的值。我有一个带有一堆属性的元素,如下所示:
<storeSurvey Annualsales="150000" BankName="Primary Bank" BusinessType="05" YearOpened="1980" Location="New Hampshire"/>
<storeSurvey Annualsales="300000" BankName="Flagstar Bank" BusinessType="07" YearOpened="1993" Location="Michigan"/>
<storeSurvey Annualsales="250000" BankName="Stifel" BusinessType="02" YearOpened="1890" Location="Missouri"/>
<storeSurvey Annualsales="500000" BankName="Frost Bank" BusinessType="08" YearOpened="1868" Location="Texas"/>
<storeSurvey Annualsales="750000" BankName="Webster Bank" BusinessType="05" YearOpened="1935" Location="Connecticut"/>
<storeSurvey Annualsales="950000" BankName="CIT Group" BusinessType="02" YearOpened="1908" Location="New York"/>
我正在尝试根据 BankName 的属性值(例如 YearOpened 和 Location)从上述 xml 文件中检索信息。
我已经尝试了以下逻辑,但出现了一些错误。我对 xml 查询还很陌生,如有任何建议,我们将不胜感激。
public static void Main(string[] args)
{
string[] arguments = Environment.GetCommandLineArgs();
args[0] = Path.GetDirectoryName(args[0]);
DataLocation = Path.Combine(args[0], "ListofBanks.xml");
// ReaderOptions Data from XML file and retriving Data
XDocument xml = XDocument.Load(DataLocation);
var criteria = new[] { "Stifel", "Frost Bank", "Primary Bank"};
var items = from item in xml.Root.Descendants("storeSurvey")
where item.Attribute("BankName").Value.Contains(criteria)
select new
{
Founded = (string)item.Attribute("YearOpened"),
HeadQuarters = (string)item.Attribute("Location"),
};
foreach(var value in items)
{
Console.WriteLine(value.Founded + " " + value.HeadQuarters);
}
Console.Read();
}
根据上述逻辑,我在条件的 where 条件中遇到错误(参数 1:无法从 String[] 转换为字符串以及 foreach 条件 "items" - foreach 语句无法对变量进行操作类型 '?' 因为 '?' 不包含 'GetEnumerator'.
的 public 实例定义
我正在尝试在我的控制台上实现以下目标 window:
1890 Missouri
1868 Texas
1980 New Hampshire
使用以下内容:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication1
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
XDocument doc = XDocument.Load(FILENAME);
var results = doc.Descendants("storeSurvey").Select(x => new
{
sales = (decimal)x.Attribute("Annualsales"),
bank = (string)x.Attribute("BankName"),
businessType = (int)x.Attribute("BusinessType"),
opened = (int)x.Attribute("YearOpened"),
location = (string)x.Attribute("Location")
}).ToList();
}
}
}
您可以使用 jdweng 分享的代码并应用 Linq 表达式 WhereClause
class Program
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
string[] validBankNames = new [] { "Stifel", "Frost Bank", "Primary Bank" };
XDocument xDocument = XDocument.Load(FILENAME);
var results = xDocument.Descendants("storeSurvey")
.Select(x => new Bank
{
AnnualSales = (int)x.Attribute("Annualsales"),
BankName = (string)x.Attribute("BankName"),
BusinessType = (string)x.Attribute("BusinessType"),
YearOpened = (int)x.Attribute("YearOpened"),
Location = (string)x.Attribute("Location")
})
.Where(bank=> validBankNames.Contains(bank.BankName))
.ToList();
results.ForEach(x => Console.WriteLine($"{x.YearOpened} {x.BankName}"));
Console.ReadKey();
}
}
public class Bank
{
public string BankName { get; set; }
public int AnnualSales { get; set; }
public string BusinessType { get; set; }
public int YearOpened { get; set; }
public string Location { get; set; }
}
我正在尝试读取 XML 文件以连接特定属性的值。我有一个带有一堆属性的元素,如下所示:
<storeSurvey Annualsales="150000" BankName="Primary Bank" BusinessType="05" YearOpened="1980" Location="New Hampshire"/>
<storeSurvey Annualsales="300000" BankName="Flagstar Bank" BusinessType="07" YearOpened="1993" Location="Michigan"/>
<storeSurvey Annualsales="250000" BankName="Stifel" BusinessType="02" YearOpened="1890" Location="Missouri"/>
<storeSurvey Annualsales="500000" BankName="Frost Bank" BusinessType="08" YearOpened="1868" Location="Texas"/>
<storeSurvey Annualsales="750000" BankName="Webster Bank" BusinessType="05" YearOpened="1935" Location="Connecticut"/>
<storeSurvey Annualsales="950000" BankName="CIT Group" BusinessType="02" YearOpened="1908" Location="New York"/>
我正在尝试根据 BankName 的属性值(例如 YearOpened 和 Location)从上述 xml 文件中检索信息。
我已经尝试了以下逻辑,但出现了一些错误。我对 xml 查询还很陌生,如有任何建议,我们将不胜感激。
public static void Main(string[] args)
{
string[] arguments = Environment.GetCommandLineArgs();
args[0] = Path.GetDirectoryName(args[0]);
DataLocation = Path.Combine(args[0], "ListofBanks.xml");
// ReaderOptions Data from XML file and retriving Data
XDocument xml = XDocument.Load(DataLocation);
var criteria = new[] { "Stifel", "Frost Bank", "Primary Bank"};
var items = from item in xml.Root.Descendants("storeSurvey")
where item.Attribute("BankName").Value.Contains(criteria)
select new
{
Founded = (string)item.Attribute("YearOpened"),
HeadQuarters = (string)item.Attribute("Location"),
};
foreach(var value in items)
{
Console.WriteLine(value.Founded + " " + value.HeadQuarters);
}
Console.Read();
}
根据上述逻辑,我在条件的 where 条件中遇到错误(参数 1:无法从 String[] 转换为字符串以及 foreach 条件 "items" - foreach 语句无法对变量进行操作类型 '?' 因为 '?' 不包含 'GetEnumerator'.
的 public 实例定义我正在尝试在我的控制台上实现以下目标 window:
1890 Missouri
1868 Texas
1980 New Hampshire
使用以下内容:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication1
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
XDocument doc = XDocument.Load(FILENAME);
var results = doc.Descendants("storeSurvey").Select(x => new
{
sales = (decimal)x.Attribute("Annualsales"),
bank = (string)x.Attribute("BankName"),
businessType = (int)x.Attribute("BusinessType"),
opened = (int)x.Attribute("YearOpened"),
location = (string)x.Attribute("Location")
}).ToList();
}
}
}
您可以使用 jdweng 分享的代码并应用 Linq 表达式 WhereClause
class Program
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
string[] validBankNames = new [] { "Stifel", "Frost Bank", "Primary Bank" };
XDocument xDocument = XDocument.Load(FILENAME);
var results = xDocument.Descendants("storeSurvey")
.Select(x => new Bank
{
AnnualSales = (int)x.Attribute("Annualsales"),
BankName = (string)x.Attribute("BankName"),
BusinessType = (string)x.Attribute("BusinessType"),
YearOpened = (int)x.Attribute("YearOpened"),
Location = (string)x.Attribute("Location")
})
.Where(bank=> validBankNames.Contains(bank.BankName))
.ToList();
results.ForEach(x => Console.WriteLine($"{x.YearOpened} {x.BankName}"));
Console.ReadKey();
}
}
public class Bank
{
public string BankName { get; set; }
public int AnnualSales { get; set; }
public string BusinessType { get; set; }
public int YearOpened { get; set; }
public string Location { get; set; }
}