문제

이 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에서 SQL을 사용하여 그 테이블에서 레코드를 얻고 있습니다.

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

그게 작동합니다. 생성 된 부분 객체를 잘게 만듭니다.

XML 인 ArticleKeywords 필드의 데이터를 걸어 가고 싶습니다. 나는 이것을하기 시작했다 :

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

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

나는 그 데이터를 올바르게 받고 있다고 100% 확신하지 못한다. XML 필드에서 값을 얻고 표시하려면 적절한 구문에 대한 도움이 필요합니다.

도움이 되었습니까?

해결책

다음은 샘플 코드입니다.

키워드를 읽으려면 전화해야합니다 집단("예어") ~ 아니다 집단("키워드") ~부터 키워드 루트 노드입니다.

// 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"). 값, 그러나 속성이 없으면이 메소드가 예외를 던집니다. 속성 값을 얻는 안전한 방법입니다 (문자열) foo.attribute ( "bar") - 그것은 당신에게 줄 것입니다 없는 속성이 누락 된 경우

다른 팁

다시 한 번 나는 사람들이 답을 시도하지 않고 사람들이 일하지 않을 때 여전히 투표를한다는 것에 놀랐습니다. .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")

나는 이런 것이 효과가 있다고 생각할 것입니다

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

이것은 당신에게 값과 디스플레이 속성을 포함하는 익명 유형의 ienumerable을 제공합니다. 당신의 행동에 따라 익명 유형을 콘크리트 유형으로 쉽게 교체 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top