【问题标题】:Load string to LINQ classes and query it将字符串加载到 LINQ 类并查询它
【发布时间】:2012-04-18 16:30:40
【问题描述】:

我对这个主题还不太了解,所以我愿意接受任何有助于实现最终目标的建议......

  1. 我从 Web 服务收到一个 XML 字符串
  2. 我想将字符串加载到能够用于 LINQ 的 C# 类中
  3. 我希望能够使用带有该类的 LINQ 提取 XML 中所有“someentity”实例的数组。

这是我用 someentity 示例编写的一些示例 XML:

<replydata>
    <someentity>
        <role id="1234" roletype="2" />
        <history length="24" accessstr="http://someurl" />
    </someentity>
    <someentity>
        <role id="1235" roletype="2" />
        <history length="30" accessstr="http://someurl2" />
    </someentity>
    ... keep repeating for a while
</replydata>

这可能吗,如果可以,有人可以提供一个简单的例子或指导我到正确的地方找到一个吗?

【问题讨论】:

标签: c# .net xml linq


【解决方案1】:

你可以这样做:

var responseString =
    @"<replydata>
        <someentity>
            <role id=""1234"" roletype=""2"" />
            <history length=""24"" accessstr=""http://someurl"" />
        </someentity>
        <someentity>
            <role id=""1235"" roletype=""2"" />
            <history length=""30"" accessstr=""http://someurl2"" />
        </someentity>
    </replydata>";
var response = XElement.Load(new StringReader(responseString));
var someentitys = response.Elements("someentity");
foreach(var e in someentitys) {
    Console.WriteLine(
        "Role: {0}, access: {1}"
    ,   e.Element("role").Attribute("roletype")
    ,   e.Element("history").Attribute("accessstr")
    );
}

【讨论】:

  • @downvoter 我很好奇你认为这段代码有什么问题:它运行得非常好,打印出预期的行。什么给了?..
  • 与复制粘贴一起工作,你是个传奇 ;) LINQ 乍一看令人困惑,哈哈。
【解决方案2】:

你在这里寻找的课程是XDocument

http://msdn.microsoft.com/en-us/library/system.xml.linq.xdocument.aspx

您可以使用它的 Parse() 方法从 XML 字符串创建一个 XDocument,然后使用 LINQ 查询该文档。

这是一篇演示其 LINQ 功能的文章

http://broadcast.oreilly.com/2010/10/understanding-c-simple-linq-to.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-17
    相关资源
    最近更新 更多