c# - 帮助 Linq to Xml 查询

标签 c# linq-to-xml

我在使用 XDocument.Parse(myXmlString) 生成的 XDocument 中有以下 xml(通过检查调试器确认)

<Size>
    <row SizeId="239" Title="XXS" Quantity="20"/>
    <row SizeId="240" Title="XS" Quantity="15"/>
    <row SizeId="241" Title="S" Quantity="12"/>
    <row SizeId="242" Title="M" Quantity="18"/>
</Size>

我正在尝试将其转换为声明为的对象列表:

public class SizeQuantityXml
{
    public int SizeId { get; set; }
    public string Title { get; set; }
    public int Quantity { get; set; }
}

但是当我这样做时,sizeQuantityXmlList 中只有第一个“行”:

List<SizeQuantityXml> sizeQuantityXmlList = 

(from x in xDocument.Descendants("Size")
 select new SizeQuantityXml() { SizeId = (int)x.Element("row").Attribute("SizeId"),
                                Title = (string)x.Element("row").Attribute("Title"),
                                Quantity = (int)x.Element("row").Attribute("Quantity") }
).ToList();

这是我第一次使用 Linq to XML 尝试任何建议,非常感谢:-)

最佳答案

您正在查询 Size 元素 - 您只有一个。您想要的是行集合:

var query = from row in xDocument.Element("Size").Descendants("row")
            select new SizeQuantityXml()
            { 
                SizeId = (int)row.Attribute("SizeId"),
                Title = (string)row.Attribute("Title"),
                Quantity = (int)row.Attribute("Quantity") 
            };

var sizeQuantityXmlList = query.ToList();

编辑:

如果您的 XML 与您发布的内容不同(例如,被更多的父标签包装),建议的解决方案将不起作用。按照最初的建议尝试 Descendants("Size").Descendants("row")

关于c# - 帮助 Linq to Xml 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5817623/

相关文章:

c# - 为什么包含值时 Contains(value) 等于 false?

c# - C# 中的成员传递?

xml - 从 Web 服务加载 XML

C# Linq to XML - 简单查询不返回任何结果

c# - Treeview 每一级的不同绑定(bind)方式

c# - Silverlight 托管在 Winforms 中

c# - 企业图书馆记录应用程序 block 选项

c# - 使用 Unity 在 ASP.NET MVC 中注入(inject)基本 Controller 构造函数

c# - Linq to XML 从 twitter API 解析单个 "status"节点

c# - 在此处获取 XElement 的行号