LINQ to XML新手问题:按属性读取xml和order

时间:2009-09-22 19:14:12

标签: linq-to-xml

我有一个noob LINQ to XML问题。我有像这样的xml:

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

我需要读入数据并将其保存到按“Order”属性排序的数组中。这就是我所拥有的;编译器正在按顺序咳嗽。

//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的答案,但是在一个像Pages这样的对象中说了一些xml片段。但永远不要显示它的类型。

谢谢

编辑: 错误是:无法找到源类型“System.Xml.Linq.XElement”的查询模式的实现。 'OrderBy'找不到。

2 个答案:

答案 0 :(得分:4)

我猜你想要这样的东西:

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 :(得分:1)

尝试使用page.Attribute(“order”)而不是page.order。