我对xQuery还是很陌生,可以解决我的工作的第一部分,但无法正常进行。 XML:http://etutor.dke.uni-linz.ac.at/etutor/XML?id=1
任务: 找到所有未购买“音频”类别(类别)产品的客户(昆顿)。
我的方法: 依次获取“音频”类别的所有产品,然后提取至少包含一个音频产品发票位置(rposition)的所有发票(rechnung)。然后,我可以从此发票序列中提取不同的客户编号,并返回未列出(未购买音频产品的客户)完整客户序列($ kunden)中的所有客户编号。
我的主要问题是,我无法使它正常构建序列,该序列包含完整的发票节点(rechnung),其中包含序列$ prodaudio的产品。 可以使用$ prodaudio类型的产品提取所有职位(请参阅$ audiorpositions)。
我将不胜感激更好的方法或任何代码片段,它们可以帮助我理解如何提取所有发票节点(rechnung)的序列,其中至少包含一个位置,并带有@prodaudio序列的产品。
由于我已经确定要进行一些练习,所以我可以自己解决带有客户编号的零件。目前,我只需要一些帮助即可获得上述发票的序列。每次尝试都会给我一系列的发票,或者全部或全部。
结果应仅包含客户编号作为元素。
let $doc := doc("https://etutor.dke.uni-linz.ac.at/etutor/XML?id=1")
let $prodaudio := $doc//produkt[kategorie = "Audio"]
let $kunden := $doc//kunde
for $rechnungen in $doc//rechnung
let $rpos := $doc//rechnung/rposition
let $audiorpositions := $doc//rechnung/rposition[$prodaudio/@ean = ean]
return $audiorpositions
xml提取:
<?xml version="1.0" encoding="UTF-8"?>
<handelskette>
<produkte>
<produkt ean="0-666-4567-2-22">
<bezeichnung>Autoschampoo</bezeichnung>
<kategorie>Pflege</kategorie>
<ekPreis>35</ekPreis>
<listPreis>69</listPreis>
</produkt>
...
</produkte>
...
<kunden>
<kunde kundeNr="11111">
<name>Roller</name>
<bonStufe>C</bonStufe>
</kunde>
<kunde kundeNr="15882">
<name>Schieber</name>
<bonStufe>B</bonStufe>
</kunde>
...
</kunden>
...
<rechnungen>
...
<rechnung rechnungNr="12" datum="03.10.00">
<bezahlt>Y</bezahlt>
<kundeNr>11111</kundeNr>
<filNr>6</filNr>
<rposition>
<ean>5-6661-000-0-00</ean>
<einzelPreis>530</einzelPreis>
<menge>3</menge>
</rposition>
<rposition>
<ean>7-2881-760-3-70</ean>
<einzelPreis>1300</einzelPreis>
<menge>1</menge>
</rposition>
<rposition>
<ean>0-4381-880-7-00</ean>
<einzelPreis>1350</einzelPreis>
<menge>1</menge>
</rposition>
</rechnung>
...
</rechnungen>
</handelskette>
编辑:完整作业解决方案:
declare context item := doc("https://etutor.dke.uni-linz.ac.at/etutor/XML?id=1");
let $kunden := //kunde,
$rechnungen := //rechnung,
$produkte := //produkt
for $r in $kunden[not(@kundeNr = $rechnungen[rposition/ean = $produkte[kategorie = 'Audio']/@ean]/kundeNr)]
return
<kundeNr>
{data($r/@kundeNr)}
</kundeNr>
返回此输出:
<kundeNr>15882</kundeNr>
<kundeNr>78436</kundeNr>
<kundeNr>98077</kundeNr>
<kundeNr>13451</kundeNr>
<kundeNr>99332</kundeNr>
<kundeNr>55789</kundeNr>
<kundeNr>77777</kundeNr>
答案 0 :(得分:0)
假设我认为 scalars j;
sets
o /red,green,blue/
p /b1,b2,b3,p1,p2,p3/
k /1*3/;
Table sup(*,*)
b1 b2 b3 p1 p2 p3
red 12 15 20 200 50 50
green 16 17 0 150 50 0
blue 13 18 0 100 50 0 ;
parameters Bid_Red(k),Pmax_Red(k),t;
*for statement***************
for(j= 1 to 3,
t=card(o)+j;
Bid_Red(k)$( ord(k) = j )=sup('red',j);
Pmax_Red(k)$( ord(k) = j )=sup('red',t);
);
*loop statement***************
t=card(o);
loop(k,
Bid_Red(k)=sup('red',k);
Pmax_Red(k)=sup('red',k+t);
);
display Bid_red, Pmax_Red
declare context item := doc("https://etutor.dke.uni-linz.ac.at/etutor/XML?id=1");
返回那些客户编号未出现在链接到“音频”类别的产品的发票上的客户。