Linq to XML:获取元素值

时间:2009-11-12 01:01:55

标签: linq-to-xml

我无法完全理解我的查询。鉴于此XML:

<?xml version="1.0" encoding="utf-8" ?>
<FileTypes>
  <File type="photo">
    <Extension>.jpg</Extension>
    <Extension>.gif</Extension>
  </File>
  <File type="document">
    <Extension>.pdf</Extension>
  </File>
  <File type="video">
   <Extension>.flv</Extension>
  </File>
</FileTypes>

我想为给定的文件类型提取字符串数组的扩展名。这就是我到目前为止所做的:

var query = from m in _UploadFileTypes.Elements("FileTypes").Elements("File")
    where m.Attribute("type").Value.ToUpper() == fileTypeFilter
    select m.Elements("Extension");

foreach (var item in query)
{
    //item.ToString() does not yield the correct value...
}

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:2)

试试这个:

var query = 
    from file in _UploadFileTypes.Root.Elements("File")
    let typeAttrib = file.Attribute("type")
    where 
        typeAttribute != null 
        && typeAttribute.Value.ToUpper() == fileTypeFilter
    from extension in file.Elements("Extension")
    select extension.Value;
foreach (var extension in query)
{
    // extension is the string content of the Extension element
}

答案 1 :(得分:1)

@Jacob给出了一个很好的答案,但我相信只使用item.Value而不是item.ToString会使用您拥有的代码提供您正在寻找的价值。

您可以使用IntelliSense将鼠标悬停在query上,以查看其项目是否为XElement类型。 @ Jacob的答案包含查询中的.Value,所以在他的版本query中包含字符串。