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