使用 Linq 从在线 XML 文件中读取数据

Posted

技术标签:

【中文标题】使用 Linq 从在线 XML 文件中读取数据【英文标题】:Use Linq to read data from an online XML file 【发布时间】:2013-04-09 17:13:34 【问题描述】:

我一直在寻找一种从 C# 中的 XML 文件中读取特定数据的方法。

示例 XML 文件:here。

我正在尝试创建一个方法,给定一个 id 属性(例如“17392”,参见示例),可以返回该特定类型 id 的最高购买价格。

我已经找了几个小时了,老实说,我已经不知所措了。任何帮助表示赞赏。

【问题讨论】:

【参考方案1】:

为我工作

    XDocument xdoc = XDocument.Load(@"MyFile.xml");
        var lv1s = from lv1 in xdoc.Descendants("type")
                   .Where(l => (string) l.Attribute("id") == "17392")
                   .Descendants("buy")
                   select (string)lv1.Element("max");


        string Result = "";
        foreach (var lv1 in lv1s)
        
            Result = lv1.ToString();
        

说明:它首先加载xml文件,然后循环遍历其后代(“type”),其中其属性(“id") 是 17392 根据您的要求 并从那里向下一层选择后代(“buy”),然后从buy中选择ma​​x元素。简而言之,它只是遵循树的结构

【讨论】:

它有效,谢谢。我完全不知道如何,但它仍然有效,谢谢。【参考方案2】:

您可以将HttpClient 与 LINQ to XML 一起使用:

string url = "...";

var client = new HttpClient();
string xml = client.GetStringAsync(url).Result;

var result = XDocument.Parse(xml).Descendants("type")
    .Where(e => (string) e.Attribute("id") == "17392")
    .Descendants("buy")
    .Select(e => (string) e.Element("max"))
    .FirstOrDefault();

【讨论】:

看起来 System.Net.Http 不再包含在 .NET 中。有什么方法可以添加吗? @Serendipity:您使用的是哪个版本的 .NET? @Cuolong Le:我使用的是 .NET 版本 4【参考方案3】:

请通过以下link。详细解释。

根据您的要求,您可以使用 contains() 方法过滤具有给节点的 id 的特定标签数据。

【讨论】:

【参考方案4】:

我正在手机上打字,请原谅我的外壳,我看不到 XML 结构。所以我假设带有价格的节点称为priceNode。

var xml = XDocument.Load(URL);

var q = xml.Root.Elements().First(x=> x.Attributes.Any() && x.Attribute("id") =="17392").Elements("PriceNode").Max (n=> n.值);

【讨论】:

以上是关于使用 Linq 从在线 XML 文件中读取数据的主要内容,如果未能解决你的问题,请参考以下文章

如何修复 System.Xml.Linq.XContainer.Element(...) 返回 null

C# Linq to XML 读取多个带有属性的标签

如何在 C# 中读取此 XML?

Android读取/访问在线xml文件

java从xml读取数据更快还是从数据库里读取数据更快?

LINQ 读取 XML 字符串并放入变量