2012-07-23 2 views
0

Я хочу получить синоним слова в C#. Например, merhaba - привет или selam-hi. Я могу только «merhaba» «привет», но я не могу получить доступ к другим узлам. (Merhaba-hi или selam-hi) Как я могу это сделать? Спасибо.В linq получить синоним слова

Мой XML-файл.

<Words> 
    <Meaning> 
     <Turkish type="noun">merhaba</Turkish> 
     <Turkish type="noun">selam</Turkish> 
     <English type="noun">hello</English> 
     <English type="noun">hi</English> 
    </Meaning> 
</Words> 

Мой запрос был таким.

var word = from p in doc.Elements("Words").Elements("Meaning") 
      where textBox1.Text == p.Element("Turkish").Value 
      select new 
      { 
       _word = p.Element("Turkish").Value, 
       meaning = p.Element("English").Value, 
       kind = p.Element("English").Attribute("type").Value 
      }; 
+0

Первое, что я хотел бы отметить, это то, что этот XML не очень подходит для того, что вы хотите. Прямой связи между «hello-merhaba» нет, кроме того, что они являются первым словом в списке слов для этого языка. Это определенно не путь. Поэтому, если этот XML не является внешним источником, и вы не можете заставить их его изменить; изменить XML. – RobIII

+0

Я смущен тем, что вы на самом деле пытаетесь сделать здесь. Вы хотите получить все узлы под независимо от того, какой из вариантов вы получите в качестве входных данных? Я согласен с тем, что структура XML кажется слишком плоской, чтобы сделать это ясным способом. –

+0

Пример. Пользователь вводит «merhaba», и я хочу показать ему привет и привет. Этот код только приветствует меня. Я не могу получить доступ к другому узлу, который называет тот же (английский). Так что же делать? :) Должен ли я изменить «английский» на другое место? – user1545283

ответ

1

Вы, вероятно, хотите попробовать что-то вроде этого:

var word = from p in doc.Elements("Words").Elements("Meaning") 
      where p.Elements("Turkish").Any(item => item.Value == textBox1.Text) 
      from synonym in p.Elements("English") 
      select new 
      { 
       _word = textBox1.Text, 
       meaning = synonym.Value, 
       kind = synonym.Attribute("type").Value 
      }; 

p.Elements("Turkish").Any(item => item.Value == textBox1.Text) Выражения ищет смысл элемент, который содержит нужное слово. Строка from synonym in p.Elements("English") проходит через все элементы с именем English.

+0

Я могу получить доступ из «merhaba» ко всем, кроме can not accsess для «селам». Он не читает для второго узла – user1545283

+0

@ user1545283 Я изменил предложение where, чтобы сделать то, что, как я думаю, вы хотите. Если это не то, что вы хотите, было бы неплохо, если бы вы могли уточнить, что такое желаемое поведение. – Jules

+0

Вот что я что. Спасибо за ваш интерес. Я исправил свой запрос, и теперь он работает :) Я создаю новый «от синонима в элементе Turkish» и отправлю его в блок where. .. || p.Elements («Турецкий») .. вот так. В любом случае меня ценят за вашу помощь. Еще раз спасибо :) – user1545283

Смежные вопросы