【问题标题】:XML Linq Newbie QuestionXML Linq 新手问题
【发布时间】:2010-07-31 07:00:47
【问题描述】:

我正在处理一个看起来像这样的 XML 文件:

<lfm status="ok">
    <user>
       <name>JohnnyWestlake</name>
       <image size="large">http://someurl.com/large.jpg</image>
       <image size="extralarge">ttp://someurl.com/exlarge.jpg</image>
       ...
    </user>
</lfm>

我正在使用 Linq 将其添加到用户类中,如下所示:

        User user;

        user = (from lfmUser in userrequest.Descendants("user")
               select new User
               {
                   Name = lfmUser.Element("name").Value,
                   ImageM = lfmUser.Element("image").Value,
                   ...
               }).FirstOrDefault();

问题,如何将 ImageM 设置为 image size="extralarge" 中包含的 url,而不是 image size="large"?还是我应该换一种方式?

【问题讨论】:

    标签: c# xml linq


    【解决方案1】:
    ImageM = lfmUser.Elements("image")
                    .Where( e => e.Attribute( "size" ).Value == "extralarge" )
    

    【讨论】:

    • 我对你的解决方案投了赞成票,即使使用 firstordefault 而不是 'first()' 更好
    • @frabiacca 我实际上删除了它,但“更好”取决于具体情况。如果您需要一个值来表示您的“Firsting”,那么使用 FirstOrDefault 可能不会更好,也许您宁愿有例外。 NuclearWinter nw = new ABomb(accessCode.FirstOrDefault()).Detonate(); // 现在会发生什么??
    • @Lucas:我写了“更好”,因为我认为如果我必须从我的 xml 中提取一些文本,我希望在输出中得到一些东西。如果您使用 First(),如果序列不包含任何值,它将抛出 InvalidOperationException。
    • 感谢您的回答,工作就像一个魅力,非常感谢 =)
    • @frabiacca 正确。我是说异常有时正是您想要的,而在其他时候获得 Default(T) 正是您想要的。两者都不是更好,程序员必须根据情况做出决定。 :)
    【解决方案2】:

    试试这个:

    var user = (from lfmUser in userrequest.Descendants("user")
        select new User
        {
            Name = lfmUser.Element("name").Value,
            ImageM = lfmUser.Descendants("image").Where(x=>x.Attribute("size").Value == "large").First().Value
        }).FirstOrDefault();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多