あなたが示したことに基づいて、まずXMLスニペットが有効なXMLではないことを指摘しておきます。 data
ノードは閉じられません。
これは有効なXMLドキュメントであると仮定すると、最終的にはそのタイプが変数XMLDoc
のタイプに依存します。
XDocument
の場合は、そのコードスニペットが有効で、exists
の値はtrue
になります。この文書には、という子孫が含まれており、そのビジネスについて考えることができます。
一方、XElement
の場合、そのコードスニペットは失敗し、exists
の値はfalse
になります。 XMLDoc
変数は既にroot
要素を参照しており、明らかにroot
という子孫はありません。
あなたは、しかし、より多くのこのような多分何かあなたのクエリを書き直す必要があります。
// please follow .NET naming conventions and use lowercase for local variables
XDocument xmlDoc = XDocument.Load(xmlFile);
// iterate over the `data` elements, not the `root` elements
bool exists = (from data in xmlDoc.Element("root").Elements("data")
where (string)data.Attribute("name") == "ID1"
select data).Any();
// using the cast is a personal style choice
// using `XAttribute.Value` is fine too in this case
'XMLDoc'の型は何を?それは 'XDocument'か' XElement'ですか?それは実際のXMLですか?これは有効なXMLではありません( 'data'ノードは閉じられません)。 –
これは単なるXMLスニペットです。 – Rod