我的.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());
}
问题是输出如下: 猫 - 没有 应该是 猫 - 动物
如何从我的.xml获取TE.TE?
答案 0 :(得分:3)
您的代码假定<TE.TE>
是<Lemma>
的直接子项,而不是<TE.TE>
。相反,<TE>
是<Sense>
的孩子,<Lemma>
的孩子是let null_TE = query.Element("Sense").Element("TE").Element("TE.TE")
的孩子,是Descendants
的孩子。您的代码应该像这样进行调整:
let null_TE = query.Descendants("TE.TE").FirstOrDefault()
为简单起见,您可以像jimmy_keen建议的那样使用{{1}}:
{{1}}