我有以下xml文件,我试图获取两个元素内的属性值。
XML:
<Var>
<Sour>
<Processing>
<Interpolation method="akimaspline"/>
<Aggregation method="summation" />
</Processing>
</Sour>
</Var >
C#:
XmlDocument doc = new XmlDocument();
doc.Load(xmlFile);
XmlNodeList elemNode = doc.GetElementsByTagName(Aggregation );
for (int y = 0; y < elemNode.Count; y++)
result = elemNode[y].Attributes[method].Value;
以下代码返回空字符串而不是求和。
答案 0 :(得分:2)
Linq to Xml方法 - 获取根目录下的所有元素(同时为您提供聚合和插值)并获取方法&#39;每个元素的属性值:
var xdoc = XDocument.Load(xmlFile);
var methods = xdoc.Root.Elements()
.Select(e => (string)e.Attribute("method"))
.Distinct();
输出:
[ "summation", "linear" ]
单独获取值:
var aggregationMethod = (string)xdoc.Root.Element("Aggregation").Attribute("method");
更新:更改xml后,Processing
不再是您文件的根目录。您现在有几个选项 - 只需从根
var method = (string)xdoc.Root.Element("Sour")
.Element("Processing")
.Element("Aggregation").Attribute("method");
您可以使用Descendants
查找Aggregation
元素,而无需指定路径
var method = (string)xdoc.Descendants("Aggregation").First().Attribute("method");
或者您可以使用XPath指定“聚合”的完整路径或相对路径。元素:
var method = (string)xdoc.XPathSelectElement("//Aggregation").Attribute("method");