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());
}

问题是输出看起来像: cat - none 并且应该是 cat - animal

如何从我的 .xml 中获取 TE.TE?

4

1 回答 1

3

您的代码假定它<TE.TE>是 的直接子代<Lemma>,但事实并非如此。相反,<TE.TE>是 的孩子<TE>, 是 的孩子<Sense>, 是 的孩子<Lemma>。你的代码应该像这样改编:

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

为简单起见,您可以按照 jimmy_keen 的建议使用Descendants

let null_TE = query.Descendants("TE.TE").FirstOrDefault()
于 2012-06-30T14:05:03.007 回答