LinqtoXML: получение значений элементов - PullRequest
1 голос
/ 12 ноября 2009

Я не могу правильно понять мой запрос. Учитывая этот 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 ]

2 голосов
/ 12 ноября 2009

Попробуйте это:

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 голос
/ 12 ноября 2009

@ Джейкоб дал отличный ответ, но я думаю, что простое использование item.Value вместо item.ToString даст значение, которое вы ищете, используя код, который вы имели.

Вы можете использовать IntelliSense для наведения на query, чтобы увидеть, что его элементы имеют тип XElement. @ Ответ Джейкоба содержит .Value в запросе, поэтому в его версии query содержит строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...