C# で XML ファイルから特定のデータを読み取る方法を探していました。
XML ファイルの例:こちら.
ID属性(「17392」など、例を参照)を指定すると、その特定のタイプIDの最大購入価格を返すことができるメソッドを作成しようとしています。
私は数時間探していましたが、正直なところ、頭がいっぱいです。どんな助けでも大歓迎です。
C# で XML ファイルから特定のデータを読み取る方法を探していました。
XML ファイルの例:こちら.
ID属性(「17392」など、例を参照)を指定すると、その特定のタイプIDの最大購入価格を返すことができるメソッドを作成しようとしています。
私は数時間探していましたが、正直なところ、頭がいっぱいです。どんな助けでも大歓迎です。
私のために働いた
XDocument xdoc = XDocument.Load(@"MyFile.xml");
var lv1s = from lv1 in xdoc.Descendants("type")
.Where(l => (string) l.Attribute("id") == "17392")
.Descendants("buy")
select (string)lv1.Element("max");
string Result = "";
foreach (var lv1 in lv1s)
{
Result = lv1.ToString();
}
説明:最初に xml ファイルをロードし、その属性 (" id ") が要件に従って 17392である子孫 (" type ") をループ処理し、そこから 1 レベル下に移動して子孫を選択します (" buy ") から購入し、最大要素を選択します。要するに、ツリーの構造に従います。
HttpClient
LINQ to XML で使用できます。
string url = "...";
var client = new HttpClient();
string xml = client.GetStringAsync(url).Result;
var result = XDocument.Parse(xml).Descendants("type")
.Where(e => (string) e.Attribute("id") == "17392")
.Descendants("buy")
.Select(e => (string) e.Element("max"))
.FirstOrDefault();
私は電話で入力しているので、大文字と小文字を区別して、XML 構造を見ることができません。だから私は、価格を持つノードがpriceNodeと呼ばれると仮定しています。
var xml = XDocument.Load(URL);
var q = xml.Root.Elements().First(x=> x.Attributes.Any() && x.Attribute("id") =="17392").Elements("PriceNode").Max(n= > n.Value);