通过Xdocument解析xml

时间:2015-07-29 15:21:04

标签: c# xml

我有一个简单的xml文件:

    <?xml version="1.0" encoding="utf-8" ?>
      <Parameters>
        <Valid>
          <SetSensorParameter>
            <param paramid="1" value_p="15" size="16"/>
            <param paramid="2" value_p="22" size="8"/>
          </SetSensorParameter>
       </Valid>
     </Parameters>

我需要获取属性值:

    <param paramid="1" value_p="15" size="16"/>
    <param paramid="2" value_p="22" size="8"/>

我有下一个代码:

    var doc = XDocument.Load(path);
    var smth = doc.Element("Parameters").Element("Valid").Element("SetSensorParameter").Nodes();

我可以访问 param ,但我无法获得 paramid的值, value_p,size

我怎么做?

3 个答案:

答案 0 :(得分:2)

使用Nodes会更简单,而不是使用Elements,这样您就可以使用Attribute方法检索每个属性:

var parameters = doc.Root
                    .Element("Valid")
                    .Element("SetSensorParameters")
                    .Elements("param");

foreach (var parameter in parameters)
{
    Console.WriteLine("{0}: {1} {2}",
                      (int) parameter.Attribute("paramid"),
                      (int) parameter.Attribute("value_p"),
                      (int) parameter.Attribute("size"));
}

这里的强制转换将每个属性值解析为int;类似的转换可用于其他类型。

答案 1 :(得分:1)

您还可以通过以下方式获取属性值:

var attributes =  doc.Root.Descendants()
                     .Where(elem => elem.HasAttributes)
                     .SelectMany(e => e.Attributes());

foreach (var attr in attributes)
    Console.WriteLine("Name: {0}, value: {1}", attr.Name, attr.Value);

答案 2 :(得分:0)

    var doc = XDocument.Load(path);
        var parameters = doc.Root
                .Element("Valid")
                .Element("SetSensorParameter")
                .Element("param");

我可以使用

     var doc = XDocument.Load(path);
        var parameters = doc.Root
                .Element("Valid")
                .Element("SetSensorParameter")
                .Element("param").Attributes();

之后

    parameters.ElementsAfterSelf.Attributes();

很抱歉,我的Visual Studio不想用参数制作foreach。