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

本文关键字:xml 文件属性 元素 两个 读取 | 更新日期: 2023-09-27 18:34:31

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

下面的代码返回一个空字符串,而不是求和。

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

Linq to Xml 方法 - 获取根下的所有元素(为您提供聚合和插值(,并从每个元素中获取"method"属性值:

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