C#でデータをXMLで保存して抽出する方法を学習していますが、ここで同様の質問に対するさまざまな回答を読んだとしても、なぜ私の声明は何も返されていないのです。 私が書いているプログラムは単なるテストであり、xmlドキュメントにいくつかのムービーに関するデータを保存しましたが、今はそのコストに基づいていくつかのムービーを取得しようとしています。linqでXML文書を検索しても返されない
これは私が検索のために書いたクラスです。
class ExtractData
{
private XDocument _xdoc;
public List<string> SearchByCost(double cost)
{
_xdoc = XDocument.Load(FileLocation.XmlFileLocation);
List<string> list = new List<string>();
var movies = from movie in _xdoc.Root.Elements("Name")
where Convert.ToDouble(movie.Element("Cost").Value) < cost
select movie;
foreach (var item in movies)
{
list.Add(item.Value);
}
return list;
}
}
これは私がそれをコンソールにそれを印刷作るしようとしている方法です:
eData = new ExtractData();
foreach (var movie in eData.SearchByCost(9))
{
Console.WriteLine(movie);
}
そして、これはありますXML文書の内容:
<?xml version="1.0" encoding="utf-8"?>
<Movies>
<Movie>
<Id>1</Id>
<Name>Shawshank Redemption</Name>
<Director>Frank Darabont</Director>
<Year>1994</Year>
<Cost>9.95</Cost>
</Movie>
<Movie>
<Id>2</Id>
<Name>Pulp Fiction</Name>
<Director>Quentin Tarantino</Director>
<Year>1995</Year>
<Cost>8.95</Cost>
</Movie>
<Movie>
<Id>3</Id>
<Name>Sharknado</Name>
<Director>Anthony Ferrante</Director>
<Year>2013</Year>
<Cost>5.95</Cost>
</Movie>
</Movies>
私はこれが私を助けてくれるのに十分な情報であり、ありがとうございます。
var movies = from movie in _xdoc.Root.Elements("Movie") // here instead of "Name"
where (double)movie.Element("Cost") < cost
select movie;
また、XElement
が倍増する明示的なキャストをサポートしています:)
。また、 'var movies = _xdoc.Root.Elements(" Name ")のムービーから、すべての要素を選択します(おそらく何も返しませんが、そうであれば...)。次に、movie.Element( "Cost")でコストを取得しようとしますが、要素には子要素がありません!! *少なくとも、それを '_xdoc.Root.Elements 'に変更する必要があります最後に映画(「映画」)を選択し、「映画を選択する.Elements(「名前」)」などを使用して、一致する映画のすべての名前を取得する。 –
Will
ありがとう、私は明らかにそのlinqクエリで少し混在している要素名を得ていた。助けをありがとう:) – sunero4