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>
值。任何帮助都会很棒。
您是否只尝试过枚举路径项?
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;
}