2012-06-30 9 views
2

처럼 내 .XML 데이터베이스 같습니다가져올 수 없습니다 요소

<root> 
    <Lemma> 
     <Lemma.LemmaSign>cat</Lemma.LemmaSign> 
     <Lemma.PartOfSpeech>(noun)</Lemma.PartOfSpeech> 
     <Lemma.UsageLabel>(kt)</Lemma.UsageLabel> 
     <Sense> 
      <TE> 
       <TE.TE> animal</TE.TE> 
      </TE> 
      <Pronunciation>/ 
       <Pronunciation.Pronunciation>[coot]</Pronunciation.Pronunciation>/ 
      </Pronunciation> 
      : 
      <Example> 
       <Example.Example> it's a cat</Example.Example> 
       <Example.Translation> it's animal</Example.Translation> 
       | 
      </Example> 
     </Sense> 
    </Lemma> 
</root> 

하고 내 코드입니다 : 출력이 보이는 것입니다

var elements = XElement.Load("objects.xml"); 
var query1 = from query in elements.Descendants("Lemma") 
      let null_LemmaSign = query.Element("Lemma.LemmaSign") 
      let null_TE = query.Element("TE.TE") 
      where wyszuk == query.Element("Lemma.LemmaSign").Value 
      select new 
      { 
       word = null_LemmaSign == null ? "none" : null_LemmaSign.Value, 
       te = null_TE == null ? "none" : null_TE.Value, 
      }; 

foreach (var e in query1) 
{ 
MessageBox.Show(e.word.ToString() + " - " + e.te.ToString()); 
} 

그리고 문제와 같은 : 고양이 - 없음 과해야 be 고양이 - 동물

내 .xml에서 TE.TE를 얻는 방법은 무엇입니까?

+0

@jimmy_keen : 좋은 제안. OP가'null_TE == null'을 검사하기 때문에'First' 대신에'FirstOrDefault'를 사용할 것입니다. 왜냐하면 그들은 OP 요소가 발견되지 않는 경우를 기대합니다. – Douglas

+0

@Douglas : 네, 아마도 여기에있는 것이 최선일 것입니다. 이미 답변에 모두 포함되어 있기 때문에 주석을 삭제했습니다. –

+0

@Douglas는 다시 질문을했습니다 - 더 많은 요소를 얻는 방법 : 고양이, CAT2, CAT3 - 지금은 단지 첫번째 요소를 얻을 수 있습니다. – user1224476

답변

3

코드에서 <TE.TE><Lemma>의 직접 하위라고 가정합니다. 대신 <TE.TE><TE>의 하위이며 <Sense>의 하위이며 <Lemma>의 하위입니다. 코드는과 같이 적용해야합니다 jimmy_keen에서 알 수 있듯이 단순 들어

let null_TE = query.Element("Sense").Element("TE").Element("TE.TE") 

, 당신은, Descendants을 사용할 수

let null_TE = query.Descendants("TE.TE").FirstOrDefault() 
+0

저를 위해 일하십시오! 대단히 감사합니다! – user1224476

+0

안녕하세요이 다시 나는 그것을 사용,하지만 난 TE.TE 의 더 많은 요소를 가지고 것으로 나타났습니다 [ 고양이, CAT2, CAT3 :] 방법뿐만 아니라 얻을 수 첫 번째, 두 번째 및 세 번째? – user1224476

+0

'FirstOrDefault'를 제거하고 시퀀스를 반복하십시오 :'foreach (var te in query.Descendants ("TE.TE"))' – Douglas

관련 문제