0

テーブルの列に次の XML があります。

<keywords>
  <keyword name="First Name" value="|FIRSTNAME|" display="Jack" />
  <keyword name="Last Name" value="|LASTNAME|" display="Jones" />
  <keyword name="City" value="|CITY|" display="Anytown" />
  <keyword name="State" value="|STATE|" display="MD" />
</keywords>

これを介してLINQ to SQLを使用して、そのテーブルからレコードを取得しています:

GeneratedArticle ga = db.GeneratedArticles.Single(p => p.GeneratedArticleId == generatedArticleId);

これで問題なく、GeneratedArticle オブジェクトを取得できました。

XML である ArticleKeywords フィールドのデータについて説明したいと思います。私はこれを始めました:

var keywords = from k in ga.ArticleKeywords.Elements("Keywords")
                    select k;

            foreach (var keyword in keywords)
            {
             //what goes here?   
            }

そのデータが正しく取得されているかどうかは 100% 確信が持てません。XML フィールドから値を取得して表示するための適切な構文についてサポートが必要です。

4

3 に答える 3

3

繰り返しになりますが、人々は自分の答えを試すことさえせず、仕事をしていないのにまだ投票に参加していることに驚いています. .Elements は、現在のルートにある要素のリストを取得しますが、これはキーワードではありません。

また、 .Attributes["X"] を使用するものはコンパイルさえしません。もちろん、() を使用する必要があります。もちろん、「キーワード」ではなく「キーワード」の各インスタンスで動作します。

あなたが使用することができます

var keywords = from kw in ga.ArticleKeywords.Element("keywords").Elements()

また

var keywords = from kw in ga.ArticleKeywords.Element("keywords").Elements("keyword")

または(これにより、レベルに関係なくすべてのキーワード要素が取得されます)

var keywords = from kw in ga.ArticleKeywords.Descendants("keyword")
于 2008-10-20T20:41:55.803 に答える
2

サンプルコードは次のとおりです。

キーワードを読み取るには、Elements(" keyword ") ではなく Elements(" keyword ")呼び出す必要あります。これは、keywordsがルート ノードであるためです。

// IEnumerable sequence with keywords data
var keywords = from kw in ga.ArticleKeywords.Elements("keyword")
               select new {
                   Name = (string)kw.Attribute("name"),
                   Value = (string)kw.Attribute("value"),
                   Display = (string)kw.Attribute("display")
               };


foreach (var keyword in keywords)
{
    var kw = "Name: " + keyword.Name + 
             " Value: " + keyword.Value + 
             " Display: " + keyword.Display;
    Console.WriteLine(kw);
}

foo.Attribute("bar").Valueを使用して属性値を取得できますが、属性が欠落している場合、このメソッドは例外をスローします。属性値を取得する安全な方法は(string)foo.Attribute("bar")です -属性が欠落している場合はnullになります

于 2008-10-16T02:16:05.150 に答える
0

私はこのようなものがうまくいくと思うだろう

var keywordData = from k in ga.ArticleKeywords.Elements("Keywords")
                  select new { Value = k.Attributes["value"].Value,
                               Display = k.Attributes["display"].Value};

これにより、値と表示プロパティを含む匿名型の IEnumerable が得られます。何をするかに応じて、匿名型を具象型に簡単に置き換えることができます。

于 2008-10-16T02:13:14.123 に答える