如何使用XSLT 1.0或XQuery 1.0来模拟sql(分组和使用多个xml节点)

时间:2016-05-11 15:20:40

标签: xslt xslt-1.0 xquery xslt-grouping

我在节点中有4个xml文档,我正在尝试使用XSLT 1.0或XQuery 1.0来处理查询这些xml文件并生成一个xml作为输出。我不确定如何在XSLT 1.0中使用密钥和分组功能,以及如何有效地查询多个xml节点以形成一个输出xml。 (每个xml文件中有多行)

表A

   <table>
    <row>
     <id></id>
     <group></group>
     <version></version>
     <status></status>
    <row>
   <table>

tableB的

   <table>
    <row>
     <id></id>
     <group></group>
     <version></version>
    </row>
   <table>

表C

   <table>
    <row>
     <id></id>
     <code></code>
     <version></version>
     <code_version></code_version>
     <version></version>
    </row>
   <table>

提交

   <table>
    <row>
     <id></id>
     <code></code>
     <code_version></code_version>
     <date></date>
    </row>
   <table>

我的SQL查询:

  SELECT a.[id]
  ,c.[code]
  ,d.[date]
  ,a.[group ]
  FROM [source].[dbo].[tableA] a, [source].[dbo].[tableB] b, 
  [source].[dbo].[tableC] c, [source].[dbo].[tableD] d

 WHERE a.[id] = b.[id] 
  AND a.[version] = b.[version] 
  AND a.[id] = c.[id] 
  AND a.[version] = c.[version]
  AND c.[code] = d.[code] 
  AND c.[code_version] = d.[code_version]
  GROUP BY a.[id]
  ,c.[code]
  ,d.[date]
  ,a.[status]
  ORDER BY  a.[id], c.[code]

我也尝试过创建部分XQuery 1.0,但它无法正常工作。

我的XQuery 1.0:

xquery version "1.0";
declare namespace ms = "http://www.ms.com/extensions";

let $A := fn:doc('tableA.xml')
let $B := fn:doc('tableB.xml')
let $C := fn:doc('tableC.xml')
let $D := fn:doc('tableD.xml')

for $a in $A,
    $b in $B,
    $c in $C,
    $d in $D

where $a/table/row/id = $b/table/row/id 
and $a/table/row/version = $b/table/row/version 
and $a/table/row/id = $c/table/row/id 
and $a/table/row/version = $c/table/row/version 
and $c/table/row/code = $d/table/row/code
and $c/table/row/code_version = $d/table/row/code_version

order by $a
return $a

这只是一个部分查询。如果我不在$ c和$ d上应用where子句,则此查询很有效。我不确定这是否是执行此操作的正确方法。

0 个答案:

没有答案