簡體   English   中英

使用LINQ解析XML文件

[英]XML file parsing using LINQ

我需要根據某些字段值從xml文件中提取數據。 xml文件是這樣設置的

<main>
 <report>
  <version>1.0</version>
  <ID>1234</ID>
  <field>
   <acel>80</acel>
   <decel>50</decel>
   <left>20</left>
   <right>10</right>
   <category>1-10</category>
  </field> 
  <field>
   <acel>30</acel>
   <decel>54</decel>
   <left>12</left>
   <right>13</right>
   <category>10-20</category>
  </field> 
  <field>
   <acel>34</acel>
   <decel>210</decel>
   <left>27</left>
   <right>9</right>
   <category>20-30</category>
  </field>
 </report>
 <report>
 ....
 </report>
</main>

我目前有以下內容:

var query = doc.Descendants("report")
           .Select(raw => new
           {
               version = (string)raw.Element("version"), 
               tcid = (string)raw.Element("id"),
               forces =    raw.Element("field").Elements("acel").Select(acel => (int)acel).ToList()

           });

我需要在文件中搜索與特定ID和特定版本匹配的報告,然后獲取相應的字段acel,decel,left,right等。

例如,我需要找到ID為1234和版本1.0的報告,並具有所有字段值80、50等。任何幫助都很好。 我有已經返回ID和版本的代碼,但是我在獲取基於版本和ID的字段的所有值時遇到了麻煩。

謝謝。

首先插入.Where()

var query = doc
        .Descendants("report")
        .Where(r => r.Element("version").Value == "1.0" 
                    && r.Element("ID").Value == "1234") 
        .Select(raw => new
           {
               version = (string)raw.Element("version"), 
               tcid = (string)raw.Element("id"),
               forces = raw.Element("field").Elements("acel")
                          .Select(acel => (int)acel).ToList()

           });

給你一個提示:

var xDoc = XDocument.Parse(xml);
var fields = xDoc
    .Descendants("report")
    .Where(r => (int)r.Element("ID") == 1234)
    .Elements("field")
    .Select(f => new
        {
            Acel = f.Element("acel").Value,
            Decel = f.Element("decel").Value,
        }
    );

我們首先獲取report節點,並將其過濾為與ID 1234相匹配的節點,這使我們獲得了示例中的第一個節點。 接下來,我們查詢此報告中的所有field節點,並根據字段值提取新對象。 看起來 很簡單 嗎? 真的是!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM