Sharepoint CAML查询“And或In”语句的多个分支

Sharepoint CAML查询“And或In”语句的多个分支,sharepoint,sharepoint-2010,caml,Sharepoint,Sharepoint 2010,Caml,我正在使用CAML查询从列表中提取项目 我试图重新安排查询的结构,但仍然没有返回任何内容。我尽量不使用CAMLQuery Builder手动执行此操作 <Query> <Where> <And> <Contains> <FieldRef Name="Field1"/><Value Type="Text">A</Value>

我正在使用CAML查询从列表中提取项目

我试图重新安排查询的结构,但仍然没有返回任何内容。我尽量不使用CAMLQuery Builder手动执行此操作

<Query>
    <Where>
        <And>
            <Contains>
                <FieldRef Name="Field1"/><Value Type="Text">A</Value>
            </Contains>
            <And>
                <In>
                    <FieldRef Name="Field2"/><Values><Value Type="Text">B</Value></Values>
                </In>
                <Or>
                    <In>
                        <FieldRef Name="Field3"/><Values><Value Type="Text">C</Value></Values>
                    </In>
                    <In>
                        <FieldRef Name="Field4"/><Values><Value Type="Text">D</Value></Values>
                    </In>
                </Or>
            </And>
        </And>
    </Where>
</Query>
注意:我见过一些问题看起来像是这个问题的复制品,但从来没有见过一个问题像这个层次的分支那样深入。CAML查询在您放置结束标记的位置似乎很特别


我的嵌套是否正确?此查询中可能有什么错误/缺失?

虽然您的CAML在没有实际和元素的情况下对我来说是有效的,但我无法专门测试您的字段名、类型和值,我倾向于以更平衡的方式编写CAML,例如:

<Query>
    <Where>
        <And>
            <And>
                <Contains>A</Contains>
                <In>B</In>
            </And>
            <Or>
                <In>C</In>
                <In>D</In>
            </Or>
        </And>
    </Where>
</Query>

根据规范,你发布的版本和我的答案都会得到相同的结果,但我会测试确认。如果上述方法不起作用,那么撇开简短不谈,我建议发布完整的CAML,这样我们就可以用相同的字段名和类型以及匹配值的测试数据重新创建列表。

您的查询不正确:例如,每个比较运算符包含两个其他节点-1包含字段名,somevalue包含要比较的值。OP,我们假设您为了简洁起见省略了和元素-请用完整的CAML更新问题。@Stevangelista是的,我用A、B、C、D替换了这些元素。为了简单起见,我这样做是因为我的问题似乎来自它的父节点的结构。@Yevgeniy.Chernobrivets不能只有1个,就像可以一样?例如:我相信Yevgeniy的意思是需要两个子元素;一个和一个-不是每个都有两个。已编辑。我只是不想透露我的字段名和搜索值。我很感激需要清理数据,但如果这确实是CAML的样子,那么这些条件是不正确的。操作符有一个子元素,它本身有n个元素。此外,由于操作符旨在简化在分支内写入多个条件的过程,因此不应仅将其用于单个条件。感谢您捕捉到这一点!我实际上是在用我的手机,但忘了把它们放在这里。正如Yevgeniy所评论的那样,如果没有真实的列名、数据类型、筛选器值和示例项,就不可能进行进一步的测试。我的答案和您的CAML都符合CAML规范,但要了解为什么它在您的特定用例中不起作用,需要更多的细节。