繁体   English   中英

用linq解析xml文件

[英]parsing a xml file with linq

我有以下xml结构:

 //this is the root
<factory ver="123" id="1">
    //can be a lot of lines
   <line id="123" name="line name">
         //can be alot of machines
         <machine id="101" Type="Weel">
           <setting Title="Filled" Value="No"  />
           <setting Title="Size"   Value="14" />
           <setting Title="Mandatory" Value="No"/>
        </machine>
        <machine id="222" Type="Reel">
           <setting Title="Filled" Value="No"  />
           <setting Title="Size"   Value="14" />
           <setting Title="Mandatory" Value="No"/>
        </machine>
   </line>
  <line id="312" name="line name1">
         <machine id="111" Type="Weel">
           <setting Title="Filled" Value="No"  />
           <setting Title="Size"   Value="14" />
           <setting Title="Mandatory" Value="No"/>
        </machine>
        <machine id="333" Type="Reel">
           <setting Title="Filled" Value="No"  />
           <setting Title="Size"   Value="14" />
           <setting Title="Mandatory" Value="No"/>
        </machine>

如何通过给定的机器ID通过LinqXDocument来获取其类型和所有设置(可能还有很多未列出所有设置)。

好吧,您可以像这样轻松地访问特定的计算机:

var element = doc.Descendants("machine")
                 .FirstOrDefault(x => (int) x.Attribute("id") == targetId);

如果没有匹配的元素,则将返回null

如果要从中转到设置名称到设置值的字典,可以使用:

// After checking whether `element` is null of course
var settings = element.Elements("setting")
                      .ToDictionary(x => x.Attribute("Title").Value,
                                    x => x.Attribute("Value").Value);

而且类型很简单:

var type = (string) element.Attribute("Type");

像这样:

XElement.Parse(...).Descendants("machine").First(m => m.Attribute("id").Value == x)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM