2014-04-04 2 views
2

XMLDocument에 XML을로드하고 있습니다.LINQ를 쿼리하여 XML 파일에서 하위 태그를 가져옵니다.

<REPORT id="Loan" version="20120710160558"> 
    <FILE id="Loan_20120710"> 
     <INDEX NAME="Amount" VALUE="45000" PAGE="1"/> 
     <INDEX NAME="Amount" VALUE="20000" PAGE="2"/> 
     <INDEX NAME="Amount" VALUE="32494" PAGE="3"/> 
     <INDEX NAME="Name" VALUE="Christie" PAGE="1"/> 
     <INDEX NAME="Name" VALUE="Christie" PAGE="2"/> 
     <INDEX NAME="Name" VALUE="Christie" PAGE="3"/> 
     <INDEX NAME="Date" VALUE="02082012" PAGE="1"/> 
     <INDEX NAME="Date" VALUE="02082012" PAGE="2"/> 
     <INDEX NAME="Date" VALUE="02082012" PAGE="3"/> 
    </FILE> 
    <FILE id="Loan_20120712"> 
     <INDEX NAME="Amount" VALUE="34984" PAGE="1"/> 
     <INDEX NAME="Amount" VALUE="34984" PAGE="2"/> 
     <INDEX NAME="Amount" VALUE="34984" PAGE="3"/> 
     <INDEX NAME="Name" VALUE="Charles" PAGE="1"/> 
     <INDEX NAME="Name" VALUE="Charles" PAGE="2"/> 
     <INDEX NAME="Name" VALUE="Charles" PAGE="3"/> 
     <INDEX NAME="Date" VALUE="03082012" PAGE="1"/> 
     <INDEX NAME="Date" VALUE="03082012" PAGE="2"/> 
     <INDEX NAME="Date" VALUE="03082012" PAGE="3"/> 
    </FILE> 
</REPORT> 

내가 LINQ 쿼리 아래로 노력하고 있어요 : 나는 위의 쿼리 오류를 직면하고

XmlDocument doc = new XmlDocument(); 
doc.Load(XMLFile); 

var query = from xml in xdoc.Descendants("File") 
           select new 
           { 
            Amount = (string)xml.Element("Amount"), 
            Name = (string)xml.Element("Name"), 
            Date = (string)xml.Element("Date") 

           }; 

는 다음의 구조입니다.

Amount, Name 및 Contract 값을 가져 오기 위해 LINQ 쿼리를 사용하여 데이터베이스를 업데이트하려고합니까?

+0

어쩌면 시도해 볼 수 있을까요? (확실하지 않음) http://stackoverflow.com/questions/2089799/linq-to-xml-selecting-child-elementments – Swag

+0

이름이 'Amount', 이름이'Name' 인 요소를 가져 오려고합니다. 와'Date'가 있지만 이름이'NAME','VALUE','PAGE' 인 __attributes__ 만 있습니다. 먼저 속성을 읽고 나중에 피벗하려고한다고 생각합니다. – Caramiriel

+0

XmlDocument 대신 XDocument를 사용할 수 있습니까? – fex

답변

3

이 시도 :

var doc= XDocument.Load(filePath); 

var query = from file in doc.Element("REPORT").Elements("FILE") 
      from index in file.Elements("INDEX") 
      select new 
      { 
       File = file.Attribute("id").Value, 
       Name = index.Attribute("NAME").Value, 
       Value = index.Attribute("VALUE").Value, 
       Page = Int32.Parse(index.Attribute("PAGE").Value) 
      }; 

을 다음 목록을 돌리하고자하는 경우 : 당신은뿐만 아니라 원하는 경우

var pivotQuery = query.GroupBy(p => new {p.File, p.Page}).Select(g => new 
{ 
    File = g.Key.File, 
    Page = g.Key.Page, 
    Amount = g.Where(p => p.Name == "Amount").First().Value, 
    Name = g.Where(p => p.Name == "Name").First().Value, 
    Date = g.Where(p => p.Name == "Date").First().Value 
}); 

당신은 하나 하나에 이러한 쿼리를 결합 할 수 있습니다.

관련 문제