2017-11-07 12 views
3

異なる変数のxmlファイルのさまざまな条件を使用して、異なるノードの値を取得したいとします。以下はC#でファイルから異なるノード値を簡単に取得するには?

XDocument doc = XDocument.Load(@"D:\MyFiles\test.xml", LoadOptions.PreserveWhitespace); 
var a = (from x in doc.Descendants("title") 
     select x).First().Value; 
var b = (from y in doc.Descendants("label") 
     where y.Ancestors("sec").Any() 
     select y).First().Value; 
var c = (from z in doc.Descendants("sec").Attributes("id") 
     select z).First().Value; 

が、私は1行のコードでまたは多分より少ない冗長な方法でこれを行うことができます例ですか?

+0

をこのように:[クエリLINQのXMLへのXPathを使用](https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/linq/how-to-query-linq-to-xml-using-xpath)? – Fildor

+0

も参照してください。https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/linq/linq-to-xml-for-xpath-users – Fildor

答えて

6

あなたは確かにクエリ式を使う必要はありません。このコードは次のように簡単になります。

XDocument doc = XDocument.Load(@"D:\MyFiles\test.xml",LoadOptions.PreserveWhitespace); 
var a = doc.Descendants("title").First().Value; 
var b = doc.Descendants("label").First(y => y.Ancestors("sec").Any()).Value; 
var c = doc.Descendants("sec").Attributes("id").First().Value; 

また、必要に応じてXPathを使用することもできます。 (XPathSelectElements,など)個人的には、LINQ to XMLで提供されているクエリメソッドを使用することをお勧めします。

+0

)プリファレンスを使用するか、XPathを使用する際の欠点を知っていますか? – Fildor

+1

@Fildor:私は、文字列の形で別の言語に1つの言語を埋め込むことは、一般的には嫌いです。私はそれをする必要があるが、強く型付けされたオプションを好む。たとえば、生のSQLよりもLINQを好む。 –

+0

を参照してください。説明をありがとう。 – Fildor

0

あなたはあまりにも匿名型を使用することができます。

var res = from xml in xDoc.Descendants("filePath") 
      select new 
      { 
       Title = xml.Descendants("title").FirstOrDefault()?.Value, 
       Label = xml.Descendants("label").FirstOrDefault(l => l.Ancestors("sec").Any())?.Value, 
       Sec = xml.Descendants("sec").Attributes("id").FirstOrDefault()?.Value 
      }; 
関連する問題