【问题标题】:Help with Linq to Xml query帮助 Linq to XML 查询
【发布时间】:2011-04-28 11:08:40
【问题描述】:

我在使用 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 尝试,任何建议都非常感谢 :-)

【问题讨论】:

    标签: c# linq-to-xml


    【解决方案1】:

    您正在查询 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")

    【讨论】:

    • 感谢您的快速回复,但不幸的是,这给了我一个 {"Object reference not set to an instance of an object."} 异常:-(
    • 你可以试试更新版本吗?我已经在您的自定义 XML 字符串上运行了它们,它们似乎可以工作。
    • 太棒了!谢谢伙计,第二个版本有效,我有点累了,我想我可能第一次有 Descendants("Size") 而不是 Element("Size") - 再次感谢
    • YW,我一开始就是这样,但你的评论让我有点困惑——因此(我们现在知道,不必要的)改变。
    • 感谢“编辑”的工作 - 我不是我第一次做的... doh!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多