如何在c#中使用LINQ将复杂的XML解析为List?
例如:
<para l="3645" t="2387" r="7665" b="2885" alignment="left" li="3240" lsp="exactly" lspExact="492" language="en" styleRef="paraStyle_1_1_62">
<ln l="3645" t="2370" r="7665" b="2775" baseLine="2775" underlined="none" subsuperscript="none" fontSize="2650" fontFace="Tahoma" fontFamily="swiss" fontPitch="variable" spacing="60" scale="700">
<wd l="3645" t="2370" r="4365" b="2775">908</wd>
<space />
<wd l="4740" t="2370" r="4920" b="2775">W</wd>
<space />
<wd l="5295" t="2370" r="7665" b="2775">CUMBERLAN</wd>
</ln>
</para>
<para l="4740" t="2895" r="6825" b="3400" alignment="left" li="4392" lsp="exactly" lspExact="504" language="en" styleRef="paraStyle_1_1_62">
<ln l="4740" t="2895" r="6825" b="3315" baseLine="3300" underlined="none" subsuperscript="none" fontSize="2650" fontFace="Tahoma" fontFamily="swiss" fontPitch="variable" spacing="60" scale="700">
<wd l="4740" t="2895" r="5955" b="3315">DUNN,</wd>
<space />
<wd l="6375" t="2895" r="6825" b="3300">NC</wd>
</ln>
</para>
输出应该是一个List,其第一个索引将是第一个<para>
标签之间的值,即&#34; 908 W CUMBERLN&#34;
第二个指数将是&#34; DUNN NC&#34;
等等。
这是我的代码
doc = XDocument.Load(@"C:/Users/jarvisPC/Desktop/1.xml");
var data = from q in doc.Descendants("para").Descendants("ln")
where q.Element("wd") != null
select new List<string>
{
q.Element("wd").Value
};
但是它读取<wd>
标签之间的第一个文本,即输出作为列表,其第一个索引是&#34; 908&#34;第二个指数是&#34; DUNN&#34;。
答案 0 :(得分:1)
问题是您只选择了第一个<wd>
元素。
var data = from para in doc.Descendants().Where(d => d.Element("wd") != null)
select new List<string>
{
para.Elements("wd").Select(x => x.Value).Aggregate((i, j) => i + " " + j)
};
输出:
908 W CUMBERLAN
DUNN,NC