使用" dynamic"解析xml文档节点

时间:2016-04-06 13:38:31

标签: c# xml linq

我正在通过bundle update解析XML,我该如何检索所有语言,即XDocument<en><de>及其子元素?

<CodeCountry>

1 个答案:

答案 0 :(得分:0)

由于您的xml文档格式不正确,您应该首先添加根元素。 你可以这样做。

var content = File.ReadAllText(@"<path to your xml>");
var test = XDocument.Parse("<Language>" + content + "</Language>");

然后,当您拥有“动态顶级节点”时,您可能会尝试使用他们的孩子(似乎不是动态的),假设所有节点至少都有一个“descriptif”子节点。 (如果它不是“descriptif”,它可能是“prox”或“libelle”)**。

//this will give you all parents, <en>, <de> etc. nodes
var parents = test.Descendants("descriptif").Select(m => m.Parent);

然后你可以选择语言和孩子。 我使用匿名类型,你当然可以投射到自定义类。

var allNodes = parents.Select(m => new
            {
                name = m.Name.LocalName,
                Descriptif = m.Element("descriptif") == null ? string.Empty : m.Element("descriptif").Value,
                Prox = m.Element("prox") == null ? string.Empty : m.Element("prox").Value ,
                Label = m.Element("libelle") == null ? string.Empty : m.Element("libelle").Value
            });

这当然不是大文件的高性能代码,但是......这是另一个问题。

** 最坏的情况,你可以做

var parents = test.Descendants("descriptif").Select(m => m.Parent)
                .Union(test.Descendants("prox").Select(m => m.Parent))
                .Union(test.Descendants("libelle").Select(m => m.Parent));