无法得到元素

时间:2012-06-30 13:58:38

标签: c# xml linq

我的.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?

1 个答案:

答案 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}}