2013-12-22 62 views
1

我有下面的XML文件:XQuery的分組多個關係項目

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

FID將在第標籤相關fabricID,其sectionID有關部分汽車標籤 感謝所有幫助:)

+0

你能告訴你有什麼到目前爲止已經試過?另外:期望的結果與簡單的XPath查詢相比更類似於XSLT處理的輸出。你確定你想要純XPath嗎? –

+0

還有一件事:你是否需要用明確的結束標籤來書寫結果?或者它也可以是普通的XML標籤''? –

+0

你可以使用XSLT嗎? –

回答

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"/> 
+0

+1沒有足夠快的學習XQuery ...打三分鐘:-) –