读取两个元素中的xml文件属性

时间:2014-12-18 09:17:24

标签: c# xml linq linq-to-xml

我有以下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;

以下代码返回空字符串而不是求和。

1 个答案:

答案 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");