【问题标题】:Implicit conversion issue with XmlElement ad XmlNodeListXmlElement 和 XmlNodeList 的隐式转换问题
【发布时间】:2014-02-28 23:42:04
【问题描述】:

我有一个 Xml 文档,我想使用 linq 查询将其转换为 XnlNodeList。现在,Xml 和 Linq 都不是很清楚。我得到的错误是Cannot implicitly convert type 'System.Linq.IOrderedEnumerable<System.Xml.XmlElement>' to 'System.Xml.XmlNodeList'. An explicit conversion exists (are you missing a cast?)

XmlNodeList abTestDocx = abTestDoc.GetElementsByTagName("FS").OfType<XmlElement>().OrderBy(FS => FS.GetAttribute("label"));

谢谢!

【问题讨论】:

    标签: c# xmldocument xmlnodelist


    【解决方案1】:

    您通常不会自己创建 XmlNodeList 实例。你真的需要一个吗?如果您只需要遍历节点,只需将其分配给IEnumerable&lt;XmlElement&gt;

    IEnumerable<XmlElement> abTestDocx = abTestDoc
         .GetElementsByTagName("FS")
         .OfType<XmlElement>()
         .OrderBy(fs => fs.GetAttribute("label"));
    

    请注意,使用 LINQ to XML 通常比旧的XmlDocument API 更好。那么你只需要:

    IEnumerable<XElement> abTestDocx = doc
         .Descendants("FS")
         .OrderBy(fs => (string) fs.Attribute("label"));
    

    ...以及其他各种事情也会变得更简单。 LINQ to XML 很可爱 :)

    【讨论】:

    • 我需要对XmlNodeList 进行排序。原始代码是XmlNodeList abTestFieldNodes = abTestDoc.SelectNodes("//foo/bar");,稍后我们会在代码中查找XmlElement 属性等。所以这看起来像是“简单”的解决方案。
    • @Risho:为什么之后你要求它是XmlNodeList?你用它做什么?
    • 这是在 MVC 环境中,我们有一个 Xml 文件,它用作数据源来创建和填充下拉列表。我们循环遍历XmlNodeList,并将当前节点的 id 和名称与包含数据的哈希表进行比较。如果我们有匹配,我们会构建 html 控件等。
    • @Risho:那你为什么不能通过IEnumerable&lt;XmlElement&gt; 来代替呢?这就是我的意思 - 你不需要一系列节点吗?
    • 我将不得不调查一下,因为我以前没有使用过这个。感谢您的意见!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-01
    • 1970-01-01
    • 2012-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多