2015-06-01 69 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); 
}