2017-01-20 6 views
2

私は以下のXMLを持っています。データを取得する最良の方法は何ですか?LinqでXMLにデータを取得するには?

<?xml version='1.0' encoding='UTF-8'?> 
<Root> 
    <EmployeeDataRoot> 
    <EmployeeData> 
     <Employee_id>123456</Employee_id> 
     <Employee_Status>A</Employee_Status> 
     <Business_Unit>EN00</Business_Unit> 
     <Cost_Center>0904/1992</Cost_Center> 
     <Work_Location>DFW</Work_Location> 
     <Location>DFW-HDQ1</Location> 
     <Job_Category>0003</Job_Category> 
     <Last_Name>John</Last_Name> 
     <First_Name>Doe</First_Name> 
     <Middle_Name /> 
     <Preferred_Name /> 
     <Position_Title>Programmer/Analyst</Position_Title> 
     <Legal_Entity>EN00</Legal_Entity> 
     <Department_Unit>IT HR &amp; Employee Technology</Department_Unit> 
     <Run_Date>2016-12-12</Run_Date> 
    </EmployeeData> 
    </EmployeeDataRoot> 
    <Footer_No_of_Records> 
    <Records>1</Records> 
    </Footer_No_of_Records> 
</Root> 

は、オンラインでいくつかの例を見た後、私はこれらの2回の反復を試してみましたが、私はの性質を見渡したオブジェクト

のインスタンスに設定されていないエラー

オブジェクトを取得します私のEmployeeクラスとスペルが間違っていて、ノードが表示されませんでした。私はエラーが私はXMLを適切に照会していないと思う。

var xDoc = XDocument.Load(file.FullName); 
listEmployee = 
    (from e in xDoc.Descendants("EmployeeData") 
     select new Employee 
     { 
     EmployeeID = e.Element("Employee_ID").Value, 
     EmployeeStatus = e.Element("Employee_Status").Value, 
     BusinessUnit = e.Element("Business_Unit").Value, 
     CostCenter = e.Element("Cost_Center").Value, 
     WorkLocation = e.Element("Work_Location").Value, 
     Location = e.Element("Location").Value, 
     JobCategory = e.Element("Job_Category").Value, 
     FirstName = e.Element("First_Name").Value, 
     LastName = e.Element("Last_Name").Value, 
     LegalEntity = e.Element("Legal_Entity").Value 
    } 
    ).ToList(); 

と私も

listEmployee = 
    (from e in xDoc.Element("Root").Elements("EmployeeDataRoot/EmployeeData") 
    select new Employee 
    { 
     EmployeeID = e.Element("Employee_ID").Value, 
     EmployeeStatus = e.Element("Employee_Status").Value, 
     BusinessUnit = e.Element("Business_Unit").Value, 
     CostCenter = e.Element("Cost_Center").Value, 
     WorkLocation = e.Element("Work_Location").Value, 
     Location = e.Element("Location").Value, 
     JobCategory = e.Element("Job_Category").Value, 
     FirstName = e.Element("First_Name").Value, 
     LastName = e.Element("Last_Name").Value, 
     LegalEntity = e.Element("Legal_Entity").Value           
    } 
).ToList(); 
+1

私のspidey senseは、要素名が 'Employee_id'であるため、' e.Element( "Employee_ID") 'がnullであることを示しています。 'Element()'呼び出しを初期化構文に埋め込むのではなく、別々の行に置くと、これらの問題はより簡単にデバッグできます。または、インラインヌルチェックを追加する( 'e.Element(" First_Name ")== null?" ":e.Element(" First_Name ").Value') –

答えて

1

あなたの試み、イスト権利を試してみましたが、あなたが書くには、間違った "EMPLOYEE_ID"。これを試してみてください:

var xDoc = XDocument.Load(file.FullName); 
listEmployee = 
    (from e in xDoc.Descendants("EmployeeData") 
     select new Employee 
     { 
     EmployeeID = e.Element("Employee_id").Value, 
     EmployeeStatus = e.Element("Employee_Status").Value, 
     BusinessUnit = e.Element("Business_Unit").Value, 
     CostCenter = e.Element("Cost_Center").Value, 
     WorkLocation = e.Element("Work_Location").Value, 
     Location = e.Element("Location").Value, 
     JobCategory = e.Element("Job_Category").Value, 
     FirstName = e.Element("First_Name").Value, 
     LastName = e.Element("Last_Name").Value, 
     LegalEntity = e.Element("Legal_Entity").Value 
    } 
    ).ToList(); 
+0

私は何かスペルミスがあり、それらを見ているかもしれないと思ったが、もちろん私はそれを逃した。余分な目を見つけてくれてありがとう。 – Caverman

関連する問題