我有一个简单的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 。
我怎么做?
答案 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。