我在节点中有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子句,则此查询很有效。我不确定这是否是执行此操作的正确方法。