linq循环使用相同名称的标签

本文关键字:标签 循环 linq | 更新日期: 2023-09-27 18:24:32

我是linq的新手,需要一些帮助。。

我有一个xml文件,看起来像这样:

  <InputPath>
      <path isRename="Off" isRouter="Off" pattern="pattern-1">d:'temp1</path>
      <path isRename="Off" isRouter="pattern-1">d:'temp2</path>
  </InputPath>

我需要循环遍历并获取标签"path"的键值。

到目前为止,我拥有的是

var results = from c in rootElement.Descendants("InputPath") select c;
foreach (XElement _path in results)
{
    string value = _path.Element("path").Value;
}

但我只得到最后一个<path>值。任何帮助都会很棒。

linq循环使用相同名称的标签

您是否只尝试过枚举路径项?

foreach (var element in rootElement.Descendants("path"))
{
    var value = element.Value;
}

这样只会得到第一个元素,因为这就是Element方法给您的:具有给定名称的第一个子元素。

如果你想要多个元素,你可以用Elements代替:

// Note: the query expression here is pointless.
var results = from c in rootElement.Descendants("InputPath") select c;
foreach (XElement _path in results)
{
    string value = _path.Elements("path").Value;
    // Use value here...        
}

或者,使用Elements扩展方法,并一次性完成所有操作:

foreach (var path in rootElement.Descendants("InputPath").Elements("path"))
{
    string value = path.Value;
    // Use value here  
}

如果这没有帮助,请提供更多关于你试图做什么以及问题所在的信息。

如果您所说的"last"是指"元素内容",那是因为您使用了Value属性。如果您想在path元素中使用属性,您需要Attribute方法,如IamStalker所示,尽管我个人通常会将XAttribute强制转换为字符串(或其他任何类型),而不是使用Value属性,以防属性丢失。(这取决于您希望在这种情况下的行为。)

您需要的是,循环通过属性,如

foreach (XElement xElem in rootElement.Descendants("InputPath"))
{
    string isRename = xElem.Attribute("isRename").Value;
}