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

时间:2012-02-12 19:47:01

标签: c# linq

我是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>值。任何帮助都会很棒。

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

您只能以这种方式获取第一个元素,因为这是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属性。如果你想在路径元素中使用属性,你需要Attribute方法,如IamStalker所示,尽管我个人通常会将XAttribute强制转换为字符串(或者其他)而不是使用Value属性,以防缺少属性。 (这取决于你希望在这种情况下你的行为。)

答案 2 :(得分:1)

你需要的是循环这样的属性

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

}
相关问题