如何在xquery中对结果进行分组

时间:2012-07-12 15:14:52

标签: xquery

对不起标题,我不知道这个问题的最佳标题是什么

我遇到XQUERY的困难。结果不是我的预期

这是xml

<Equipes>
        <Equipe>
            <equipeId>1</equipeId>
            <equipeNom>Equipe A</equipeNom>
            <JoueurEquipe>  
                <dateDebut>2011-01-01</dateDebut>
                <dateFin>2013-01-01</dateFin>
                <numero>1</numero>
                <joueurId>1</joueurId>
            </JoueurEquipe>
            <JoueurEquipe>
                <dateDebut>2010-01-01</dateDebut>
                <dateFin>2012-01-01</dateFin>
                <numero>2</numero>
                <joueurId>2</joueurId>
            </JoueurEquipe>
        </Equipe>
        <Equipe>
            <equipeId>2</equipeId>
            <equipeNom>Equipe B</equipeNom>
            <JoueurEquipe>  
                <dateDebut>2009-01-01</dateDebut>
                <dateFin>2012-01-01</dateFin>
                <numero>1</numero>
                <joueurId>3</joueurId>
            </JoueurEquipe>
            <JoueurEquipe>
                <dateDebut>2010-01-01</dateDebut>
                <dateFin>2014-01-01</dateFin>
                <numero>2</numero>
                <joueurId>4</joueurId>
            </JoueurEquipe>
        </Equipe>
    </Equipes>

这是查询

for $b in doc("ligue.xml")/ligue/Equipes
    return 
    <Equipes>
    {
        $b/Equipe/equipeId, 
        $b/Equipe/equipeNom
    }
    </Equipes>

结果是

<equipes>
       <equipeId>1</equipeId>
       <equipeId>2</equipeId>
       <equipeNom>Equipe A</equipeNom>
       <equipeNom>Equipe B</equipeNom>
</equipes>

我需要的是

<equipes>
           <equipeId>1</equipeId>
           <equipeNom>Equipe A</equipeNom>
           <equipeId>2</equipeId>
           <equipeNom>Equipe B</equipeNom>
 </equipes>

我不知道我错过了什么

谢谢

1 个答案:

答案 0 :(得分:3)

迭代你实际想要输出迭代的东西:

<Equipes>{
for $b in doc("ligue.xml")/ligue/Equipes/Equipe[equipeId][equipeNom]
    return ($b/equipeId, $b/equipeNom)
}</Equipes>

现在,让我们探讨为什么您的先前查询的行为。这样:

for $b in doc("ligue.xml")/ligue/Equipes
    return 
    <Equipes>
    {
        $b/Equipe/equipeId, 
        $b/Equipe/equipeNom
    }
    </Equipes>

...找到Equipes元素,其中只有一个元素(使for循环无效)。然后它搜索$b/Equipe/equipeId$b/Equipe/equipeNom,两者都评估包含多个元素的列表,并连接这两个列表以获得输出。