繁体   English   中英

通过Xdocument解析xml

[英]Parse xml by Xdocument

我有一个简单的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();

, but i can't get values of . 我可以访问两个 ,但是无法获取

我该怎么办?

与使用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 其他类型也可以使用类似的转换。

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

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);
    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。

暂无
暂无

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

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