2012-02-12 62 views
0

我一些什么新的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> 

我需要循环通过并获取标签“路径”的关键值。

我有什么到目前为止

var results = from c in rootElement.Descendants("InputPath") select c; 

foreach (XElement _path in results) 
{ 
    string value = _path.Element("path").Value; 
} 

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

回答

2

你只得到第一元素的方式,因为这是该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属性,以防属性为失踪。 (这取决于你想要的行为是在这种情况下什么。)

+0

大声笑我写了一个答案.... – IamStalker 2012-02-12 19:52:23

+0

伟大的这项工作就好了,现在我知道的元素... ... – Mike 2012-02-12 20:02:36

1

你需要的是,遍历像这样的属性

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

} 
2

你试过才刚刚列举的路径项目?

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