0

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

我遇到了困难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>

我不知道我错过了什么

谢谢

4

1 回答 1

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/equipeIdand $b/Equipe/equipeNom,两者都计算为包含多个元素的列表,并将这两个列表连接起来以获得输出。

于 2012-07-12T15:22:10.790 回答