我在使用 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/