XQuery对多个关系项进行分组

时间:2013-12-22 23:33:47

标签: xml xpath xquery grouping relation

我有以下XML文件:

<?xml version="1.0" encoding="ISO-8859-1"?>
<Manufacture>
<Fabrics>
    <Fabric fid="123456-1234" name="bmw"/>
    <Fabric fid="123456-2344" name="audi"/>
    <Fabric fid="123456-3454" name="fiat"/>
</Fabrics>
<Sections>
    <Section sectionID="1" fabricID="123456-1234" />
    <Section sectionID="2" fabricID="123456-2344" />
    <Section sectionID="3" fabricID="123456-1234" />
    <Section sectionID="4" fabricID="123456-3454" />
</Sections>
<Cars>
    <Car carID="1" section="1"/>
    <Car carID="2" section="3"/>
    <Car carID="3" section="2"/>
    <Car carID="4" section="4"/>
    <Car carID="5" section="3"/>
    <Car carID="6" section="2"/>
    <Car carID="7" section="3"/>
    <Car carID="8" section="1"/>
</Cars>
</Manufacture>

我如何实现以下目标:

  

显示每种面料的汽车总数!?

即:

<result fid="123456-1234" name="bmw" total="5"></result>
<result fid="123456-2344" name="audi" total="2"></result>
<result fid="123456-3454" name="fiat" total="1"></result>

Fabric标签中的fid与Section标签中的fabricID相关,其sectionID与Car标签中的section相关 感谢任何帮助:)

1 个答案:

答案 0 :(得分:2)

你可以这样做......

<强> data.xml中

<Manufacture>
    <Fabrics>
        <Fabric fid="123456-1234" name="bmw"/>
        <Fabric fid="123456-2344" name="audi"/>
        <Fabric fid="123456-3454" name="fiat"/>
    </Fabrics>
    <Sections>
        <Section sectionID="1" fabricID="123456-1234" />
        <Section sectionID="2" fabricID="123456-2344" />
        <Section sectionID="3" fabricID="123456-1234" />
        <Section sectionID="4" fabricID="123456-3454" />
    </Sections>
    <Cars>
        <Car carID="1" section="1"/>
        <Car carID="2" section="3"/>
        <Car carID="3" section="2"/>
        <Car carID="4" section="4"/>
        <Car carID="5" section="3"/>
        <Car carID="6" section="2"/>
        <Car carID="7" section="3"/>
        <Car carID="8" section="1"/>
    </Cars>
</Manufacture>

<强>的XQuery

let $doc := doc('data.xml')/Manufacture
for $fabric in $doc/Fabrics/Fabric
return
    <result total="{count($doc/Cars/Car[@section=$doc/Sections/Section[@fabricID=$fabric/@fid]/@sectionID])}">
    {$fabric/@*}
    </result>

<强>结果

<result total="5" fid="123456-1234" name="bmw"/>
<result total="2" fid="123456-2344" name="audi"/>
<result total="1" fid="123456-3454" name="fiat"/>