Linq to XML 无法正常工作

本文关键字:工作 常工作 to XML Linq | 更新日期: 2023-09-27 17:57:24

我开始理解整个Linq到XML的东西,但是,我发现自己很困惑为什么某个查询不能按预期工作。

错误显然在查询中,但我找不到它。也许你们中的一个人可以在黑暗中发出光明。

这是我的 XML:

<folder title="test1" id="f6e27403" index="1">
<list index="1" name="content1" title="" id="5702f74a"></list>
<list index="2" name="content2" title="" id="a39db279"></list>
<list index="3" name="content3" title="" id="6f48a9e7"></list>
<list index="4" name="content4" title="" id="85d2823c"></list>
<list index="5" name="content5" title="" id="669d28f4">
    <theme index="1" name="Q1" type="r1theme" title="" id="6bf9dbce" created="2015-06-17 10:02:35" modified="2015-06-18 17:34:30">
    <properties>
        <field index="1" name="remark"/>
        <field index="2" name="title">SERIES A</field>
    </properties>
    <list>
        <theme index="1" name="q" type="lb" title="" id="b021319d-03ae-1c7a-ab31-fb081bae4570" created="2015-05-28 11:17:09" modified="2015-06-19 11:23:13">
            <properties>
                <field index="1" name="remark"/>
                <field index="2" name="content">Test</field>
            </properties>
            <list>
                <item index="1" name="q" type="item" title="" id="52ddcb77" created="2015-05-28 11:19:35" modified="2015-05-28 11:19:35">
                    <field index="1" name="query">content 1</field>
                    <field index="2" name="remark"/>
                </item>
                <item index="2" name="q" type="item" title="" id="2f5793db" created="2015-05-28 11:18:00" modified="2015-05-28 11:18:00">
                    <field index="1" name="query">content 2</field>
                    <field index="2" name="remark"/>
                </item>
            </list>
        </theme>
    </list>
    </theme>
    <theme index="2" name="Q2" type="r1theme" title="" id="6bf9dbce" created="2015-06-17 10:02:35" modified="2015-06-18 17:34:30">
    <properties>
        <field index="1" name="remark"/>
        <field index="2" name="title">SERIES B</field>
    </properties>
    <list>
        <theme index="1" name="q" type="lb" title="" id="ad703b7e" created="2015-05-28 11:17:09" modified="2015-06-19 11:23:13">
            <properties>
                <field index="1" name="remark"/>
                <field index="2" name="content">Test</field>
            </properties>
            <list>
                <item index="1" name="q" type="letterbingoitem" title="" id="8a4a5c65" created="2015-05-28 11:19:35" modified="2015-05-28 11:19:35">
                    <field index="1" name="query">content 3</field>
                    <field index="2" name="remark"/>
                </item>
                <item index="2" name="q" type="letterbingoitem" title="" id="597f9791" created="2015-05-28 11:18:00" modified="2015-05-28 11:18:00">
                    <field index="1" name="query">content 4</field>
                    <field index="2" name="remark"/>
                </item>
            </list>
        </theme>
    </list>
    </theme>
</list>
</folder>

为了可读性,我缩短了一点,每个列表只显示两个项目,实际上有几十个项目。

我正在尝试分别提取索引为 1 和索引 2 的主题项目中的字段。

为此,我使用此XML进行LINQ-query:

int indexToSearchFor = 1;
var temp = xml.Descendants("list").Where(e => (string)e.Attribute("name") == "content5").Descendants("theme").Where(g => (string)g.Attribute("type") == "lb" && (string)g.Attribute("index") == indexToSearchFor.ToString()).Descendants("field").Where(x => x.Attribute("name") != null).Where(y => y.Attribute("name").Value == "query").Select(z => z.Value).ToList();

此查询基本上是对我正在使用的另一个查询的修改。

现在,当我运行此查询时,结果列表包含名称为"query"的所有字段,因此内容 1、内容 2、内容 3 和内容 4,因为我只从主题中查找名为"查询"的字段类型为"lb"和索引"1"。

我需要分别使用 index1 和 index2 处理主题,所以在我的情况下这是行不通的。但我似乎想不通为什么?

谁能指出我正确的方向?

谢谢。

Linq to XML 无法正常工作

在再次阅读我的帖子时,我刚刚发现了错误......

在我的XML中,两个类型为"lb"的主题具有相同的索引。它是具有不同索引的父主题,所以我需要使用它们。所以修改后的代码是:

var temp = xml.Descendants("list").Where(e => (string)e.Attribute("name") == "content5").Descendants("theme").Where(g => (string)g.Attribute("type") == "r1theme" && (string)g.Attribute("index") == indexToSearchFor.ToString()).Descendants("field").Where(x => x.Attribute("name") != null).Where(y => y.Attribute("name").Value == "query").Select(z => z.Value).ToList();