使用 XDocument 按位置解析 XML

Parsing XML by position using XDocument

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

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

我们要根据节点在XML中的位置来推断Name和Description的关系。所以 Cornflakes 是 "Just add milk",Toast 没有描述,Muesli 是 "Healthy option" 等等。

我有一个 class 叫做早餐,看起来像这样:

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

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

糟糕 - 多么糟糕的格式。我可能会这样做:

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 };
}

这就是我要做的:

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();

这给了我: