2012-02-16 3 views
1

私はすでにそれを投稿したいとは思っていませんでした。 2年が経ち、LINQに触れました。今は私を掘り起こしています。 3時間の連続した試行錯誤の後、私は自分が喜んでいなかったことをすることに決めました。それをSOに投稿してください。XMLからlinqを使って価値を得る

私はこのXML

<TopMost xmlns="http://abc.com/"> 
    <Mine>MyName</Mine> 
    <Hello> 
     <File>SIMPLE</File> 
     <Book>20</Book> 
     <Copy>0</Copy> 
    </Hello> 
</TopMost> 

を持っている私は、 "ファイル"、 "ブック"、 "コピー" の値を取得したいです。ユニットテストで何かと比較したいと思っています。

私はこの点で最大に達し:

string result = string.Empty; 
const string path = @"C:\Library.xml"; 
XDocument xdoc = XDocument.Load(path); 

var lv1s = from paper in xdoc.Descendants("Hello") 
    select new 
     { 
      fileP = paper.Element("File").Value, 
      bookP = paper.Element("Book").Value, 
      copyP = paper.Element("Copy").Value, 
     }; 
result += lv1s.fileP + lv1s.bookP + lv1s.copyP; // Error 
MessageBox.Show(result); 

エラー:シーケンスは、私はそこの周りの簡単な方法である必要があり、私ははるかにそれからだ知って何の要素

が含まれていません。私は試して失敗したコードスニペットがたくさんあります。

EDIT

var lv1s = from paper in xdoc.Descendants(ns + "Hello") 
    select new 
     { 
      fileP = paper.Element(ns + "File").Value, 
      bookP = paper.Element(ns + "Book").Value, 
      copyP = paper.Element(ns + "Copy").Value, 
     }; 

私はコンパイルエラーを取得しています。

あなたがnamespcaeを指定する必要が
Error: The Name ns doex not exist in current context. 
+0

私は請求書==紙、またはその逆を想定していますか? –

+0

その紙.........申し訳ありません – Sandy

答えて

5

XNamespace ns = "http://abc.com/"; // or: doc.Root.GetDefaultNamespace() 

var lv1s = from paper in xdoc.Descendants(ns + "Hello") 
    select new 
     { 
      fileP = paper.Element(ns +"File").Value, 
      bookP = paper.Element(ns +"Book").Value, 
      copyP = paper.Element(ns +"Copy").Value, 
     }; 

string nsvar nsを使うことを考えてはいけません。

+0

'ns'は' 'ns" '.....を意味します.....私のVS 2010は' ns'を解決できません – Sandy

+1

@rapsalands: 'XNamespace'、 。 –

+0

動作しないコードを投稿してください(質問の末尾に追加してください)。 –

関連する問題