Question

I have the following XML file:

<?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>

How do I achieve the following:

Show total number of cars for each fabric!?

that is:

<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>

fid in Fabric tag is related to fabricID in Section tag, its sectionID is related to section in Car tag appreciate any help :)

Était-ce utile?

La solution

You could do something like this...

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>

Results

<result total="5" fid="123456-1234" name="bmw"/>
<result total="2" fid="123456-2344" name="audi"/>
<result total="1" fid="123456-3454" name="fiat"/>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top