使用XDocument按位置解析XML

时间:2015-06-25 11:29:03

标签: c# xml linq-to-xml

我有来自第三方的XML,看起来像这样:

<Breakfasts>
    <Name>Cornflakes</Name>
    <Description>Just add milk</Name>
    <Name>Toast</Name>
    <Name>Muesli</Name>
    <Description>Healthy option</Description>
</Breakfasts>

我们必须通过XML中节点的位置来推断Name和Description之间的关系。所以玉米片是“刚添加牛奶”,Toast没有描述,Muesli是“健康选择”等等。

我有一个名为Breakfast的课程,如下所示:

public class Breakfast
{
    public string Name { get; set; }
    public string Description { get; set; }
}

如何将这个XML解析(使用XDocument,也许?)到一个早餐列表中?

2 个答案:

答案 0 :(得分:1)

Ick - 多么可怕的格式。我可能会做类似的事情:

var list = doc.Descendants("Name").Select(MakeBreakfast).ToList();
...

static Breakfast MakeBreakfast(XElement nameElement)
{
    string name = (string) nameElement;
    var nextElement = nameElement.ElementsAfterSelf().FirstOrDefault();
    string description = 
        nextElement != null && nextElement.Name.LocalName == "Description"
        ? (string) nextElement
        : null;
    return new Breakfast { Name = name, Description = description };
}

答案 1 :(得分:-1)

这就是我要做的事情:

var breakfasts =
    doc.Root.Elements("Name").Select(x => new Breakfast()
    {
        Name = x.Value,
        Description = 
            x.NextNode as XElement != null 
            ? (x.NextNode as XElement).Name == "Description"
                ? (x.NextNode as XElement).Value 
                : ""
            : "",
    }).ToList();

这给了我:

breakfasts