【发布时间】:2016-05-07 07:04:36
【问题描述】:
我是 Linq 和 XDocument 的新手,在任何地方都找不到类似的解决方案,所以这里是:
这是我试图解析的 XML:
<environment>
<objectBuilder>
<service id="1">
<!--Service:"MagicService">
</service>
<service id="2">
<!--Service:"RubbishService">
</service>
<service id="3">
<!--Service:"MediocreService">
</service>
</objectBuilder>
</environment>
我想使用一个看起来像这样的列表:
("1 MagicService","2 RubbishService","3 MediocreService")
我已经尝试将 cmets 和 ids 读取到两个不同的列表中,然后将它们组合起来,但这不是一个足够好的解决方案,因为在我的现实世界问题中,可能存在没有注释名称的服务。
我目前的解决方案是这样的:
List<string> comments = doc.Elements("Environment")
.Elements("objectBuilder")
.Elements("service")
.Nodes()
.OfType<XComment>()
.Select(c => c.Value)
.Where(c=> c.StartsWith("Service"))
.ToList());
List<string> serviceGuides = doc.Elements("Environment")
.Elements("objectBuilder")
.Elements("service")
.Attributes(XName.Get("id"))
.Select(c => c.Value)
.ToList());
然后,如果列表大小相同,我会通过一个 for 循环并将它们连接起来。一定有更优雅的解决方案?
感谢您的帮助,如果这是一个重复/愚蠢的问题,对不起
【问题讨论】:
标签: c# xml linq parsing xml-parsing