2017-02-15 4 views
-4

C#でLINQを使用して複雑なXMLをListに解析するにはどうすればよいですか?例えばC#でLINQを使用してリスト<string>に複雑なXMLを解析するにはどうすればよいですか?

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

出力が最初のインデックス2、インデックスが「DUNN NC」 あろう「908 W CUMBERLN」すなわち最初<para>タグとの間の値になりリストであるべきです等々。

これは私のコード

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

である。しかし、そのは、すなわち出力はその最初のインデックス「908」で、第二インデックスが「ダン」で一覧として来ている<wd>間のタグの最初のテキストを読みます。

+4

あなたは私たちのために仕事を割り当てていますか? –

+3

コードの画像を投稿しないでください。 – DavidG

+1

何を試しましたか? SOはコード作成サービスではありません。正確にあなたは立ち往生しましたか? – Zesty

答えて

1

問題は、最初の<wd>要素だけを選択していることです。

使用Aggregate

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

関連する問題