2015-06-01 72 views
0

我有一個文件路徑已經加載到XDocument中。我想獲得XElement,但沒有找到任何好的來源。使用LINQ從XML獲取XElement

是否有可能使用LINQ to XML獲取XElement標籤?

XML樣子:

<?xml version="1.0" encoding="UTF-8"?> 
<transactionBlock> 
    <trans aux ID="1849" company ID="ABC"> 
     <T.2.12.0> 
      <event TS>16:02:56Z</event TS> 
      <equipment ID="0105449160" mobile Type="2" equip Type="tractor"/> 
      <driver ID>002</driver ID> 
     </T.2.12.0> 
    </trans> 
    <trans aux ID="1854" company ID="XYZ"> 
     <T.2.06.0> 
      <event TS>16:07:50Z</event TS> 
      <equipment ID="0105449160" mobile Type="3"/> 
      <driver ID>002</driver ID> 
     </T.2.06.0> 
    </trans> 
</transactionBlock> 
+0

XML示例: <?XML版本= 「1.0」 編碼= 「UTF-8」?> <事務塊> <反式輔助ID = 「1849」 公司ID = 「ABC」> 16:02:56Z <設備ID = 「0105449160」 移動類型= 「2」 裝備類型= 「拖拉機」/> <反式的輔助ID = 「1854」 公司ID = 「XYZ」> 16:07:50Z <設備ID = 「0105449160」 移動類型= 「3」/> user2229874

+0

你想要哪個元素,只要使用XDocumentInstance.Root.Elements()就會給出所有的元素。 – Dreamweaver

+0

我只想要,。我將這些值作爲XElement傳遞以後使用。 – user2229874

回答

0
IEnumerable<string> transactions = doc.Root.Descendants("trans").Where(x => string.Compare(x.Name.LocalName, "trans") == 0 && x.HasElements).Select(x => (x.FirstNode as XElement).Name.LocalName); 
       foreach (var item in transactions) 
       { 
        Console.WriteLine(item);  
       } 
0

我希望它會幫助別人:

解決方案:

 var doc = XDocument.Load(File); 
     var transactions = doc.Root.Elements().Select(t => t.Elements().First()); 

     foreach (var transaction in transactions) 
     { 
      var id = transaction.Name.LocalName; 
      Console.WriteLine(id); 
     } 

輸出:

T.2.12.0

T.2.06.0

+0

如果任何情況下t中沒有元素,則調用t,First()將拋出一個異常「Sequence Contains no element。」。 – Dreamweaver

+0

@Dreamweaver感謝您分享您的解決方案。就我而言,我們總是有一個元素。 – user2229874

1

我發現使用XPath表達式更容易在XML元素中導航,因爲它可以處理過濾器和對現有結構的更直接的方法。在這種情況下,你可以這樣做:

var doc = XDocument.Parse(@"<?xml version='1.0' encoding='UTF-8'?> 
    <transactionBlock> 
     <trans auxID='1849' companyID='ABC'> 
      <T.2.12.0> 
       <eventTS>16:02:56Z</eventTS> 
       <equipment ID='0105449160' mobileType='2' equipType='tractor'/> 
       <driverID>002</driverID> 
      </T.2.12.0> 
     </trans> 
     <trans auxID='1854' companyID='XYZ'> 
      <T.2.06.0> 
       <eventTS>16:07:50Z</eventTS> 
       <equipment ID='0105449160' mobileType='3'/> 
       <driverID>002</driverID> 
      </T.2.06.0> 
     </trans> 
    </transactionBlock>"); 

var transactions = doc.XPathSelectElements("/transactionBlock/trans/*"); 
foreach (var transaction in transactions) 
{ 
    Console.WriteLine(transaction.Name); 
}