Xml XQuery对多个关系项进行分组

Xml XQuery对多个关系项进行分组,xml,xpath,xquery,grouping,relation,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"/> <

我有以下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相关
感谢您的帮助:)

您可以这样做

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>
let$doc:=doc('data.xml')/Manufacture
对于$doc/Fabrics/fabric中的$fabric
返回
{$fabric/@*}
结果

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


您能展示一下到目前为止您已经尝试了什么吗?另外:期望的结果更像XSLT处理的输出,而不是简单的XPath查询。您确定要纯XPath吗?还有一件事:您是否需要使用显式结束标记编写结果?或者也可能是常规的XML标记
?我尝试了许多查询,但都没有成功:{let$fabric:=文档中的$fabrics(“data.XML”)//fabrics返回$fabrics let$section:=文档中的$sections(“data.XML”)//sections返回$sections let$car:=文档中的$cars(“data.XML”)//汽车返回$cars let$v:=在$fabric/fabric中$ss/@fid在$section/section中$dd[@sectionID=$ss]在$car/car中$bb[@section=$dd/@sectionID]订购$ss返回$dd让$tot:=在(1到23)中$v[$i]/@fid=$fabric/fabric[2]/@fid返回($v[$i]/@fid)返回{}总数:{计数($tot)}否,答案可以是一个普通的XML标记,也就是说,我必须道歉:我还不熟悉XQuery。我确实有一个XPath表达式可以解决您的问题,但它仍然需要被包装到XQuery中,到目前为止,我一直把XQuery作为XPath的同义词(真丢脸!)。所以您的语法可能很好!:-)+我学习XQuery不够快。。。被三分钟击败:-)