私はこのウェブサイト上でかなり新しいよに質問することはできません、それは私の最初の質問です。私はその文書を読んだが、行動規範を制圧すれば、事前に申し訳なく思う。私は、ストリーム内のXMLファイルを持っているC#のLINQ:tag.descendantsは、すべての子孫
: はここに私の質問です。私の目標は、属性「名前」、「タイプ」、およびキー(明らかな理由で変更されている)を取得することです。
<YourKey>
<Product_Key Name="eMbedded Visual C++ 4.0">
<Key ID="5" Type="Static Activation Key" ClaimedDate="">BBBBB-QW36D-DPT6T-BBBB-ZZZZZ</Key>
</Product_Key>
<Product_Key Name="Windows 10 Home">
<Key ID="1251" Type="Retail" ClaimedDate="1/25/2017">ZZZZZ-6GBG7-ZZZZZ-8JG23-FM47H</Key>
<Key ID="1251" Type="Retail" ClaimedDate="8/23/2016">FEFEF-FVD7K-EEEEF-BEBEB-VMHX7</Key>
<Key ID="1251" Type="Retail" ClaimedDate="4/28/2016">EEZZE-GYB6P-ZZZEE-R72PQ-EEEEZ</Key>
</Product_Key>
</YourKey>
私はデータ
public class MsProduct
{
public string Name { get; set; }
public string Type { get; set; }
public List<string> key { get; set; }
}
を保持するクラスを作成し、私は私のオブジェクトに(後を参照)var list
のすべての要素を追加するMsProduct
のリストを作成しました。
Key = (List<string>)keys
なしでコンパイルするLinqクエリを作成しましたが、値Name, Type
は空です(データが存在しない場合(つまり== null)、それが " )。
私はKey = (List<string>)keys
を追加すると、システムは「System.InvalidCastExceptionのを」スローされます。ここ
は私のクエリです:
var productName = XDocument.Load(fileXml);
var list = from product in productName.Descendants("YourKey")
let name = product.Attribute("Name")
let type = product.Attribute("Type")
let keys = product.Elements("Key")
select new MsProduct
{
Name = (string)name,
Type = (string)type,
Key = (List<string>)keys
};
誰もが私のクラスを移入するために、私のファイルを照会する方法任意のアイデアを持っていますか?
ありがとうございます!
タイプはキーではなく、製品の属性です。その行とコメントをコメントしてください。もう1つ、あなたのXMLは有効ではありません。 – A3006
すぐにお返事ありがとうございます。 XMLはMicrosoftから直接提供され、それは自分のMSDNサブスクリプティングのエクスポートです。私はコードを作成しませんでした;)。キーはちょうど声を掛けた答えによって答えられました、私は今どのように "タイプ"を完成させるのだろうかと思っています。 –