LINQ to XML Вопрос новичка: чтение XML и упорядочение по атрибутам - PullRequest
2 голосов
/ 22 сентября 2009

У меня вопрос noob LINQ to XML. У меня xml вот так:

<pages>
    <page Name="Welcome" Control="Welcome" Order="1"></page>
    <page Name="Summary" Control="Summary" Order="10"></page>
</pages>

Мне нужно прочитать данные и сохранить их в массив, упорядоченный по атрибуту «Порядок». Вот что у меня есть; компилятор кашляет на порядок по пункту.

//read in app.xml data into _Pages
XDocument doc = XDocument.Parse("app.xml");
XElement Pages = (XElement)doc.Descendants("pages");

var Pages1 =
  (from page in Pages  //<-- error on orderby clause
  orderby page.order
  select page).ToArray();

Я искал SO и нашел несколько ответов LINQ to XML, которые выглядят примерно так, но что-то говорят о фрагменте xml в объекте, таком как Pages. Но никогда не показывай, что это тип.

Спасибо

EDIT: Ошибка: Не удалось найти реализацию шаблона запроса для типа источника «System.Xml.Linq.XElement». 'OrderBy' не найден.

Ответы [ 2 ]

4 голосов
/ 22 сентября 2009

Полагаю, вы хотите что-то вроде этого:

using System.Linq;
using System.Xml.Linq;
namespace SampleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            string xml = @"<pages>   
                <page Name=""Summary"" Control=""Summary"" Order=""10""></page> 
                <page Name=""Welcome"" Control=""Welcome"" Order=""1""></page>
            </pages>";
            XDocument doc = XDocument.Parse(xml);
            XElement[] pages = doc
              .Descendants("page")
              .OrderBy(x => (int)x.Attribute("Order"))
              .ToArray();
        }
    }
}

Это работает для вас? Это работает при условии, что атрибутом Order всегда является int (здесь я сделал предположение).

1 голос
/ 22 сентября 2009

Попробуйте page.Attribute ("order") вместо page.order.

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