如何在XML中添加某些属性的值?

问题描述 投票:0回答:1

我有一个XQuery需要总结特定库分支的所有Book副本。分支号码是1,2,3和4,因此可以使用for循环来计算该号码。我需要找到每个分支(1,2,3或4)总共有多少本书。

我已经尝试过使用XQuery的sum函数,但它并没有为每个分支增加书籍数量,而只是将所有分支的所有书籍总共加起来,即99.所以它说分支1有99本书,第2科有99本书,依此类推。

我已经在SQL查询中完成了这个,但我需要将它转换为XQuery。

SQL查询:

SELECT SUM(OnHand) as onHand_sum 
from Inventory 
WHERE BranchNum ='$inputBranch'

我需要帮助下面代码中的“Stock BookCopies =”部分。

XQuery的:

<results>
{
for $x in doc("C:\basex\henry\Branch.xml")/dataroot/Branch
let $s := doc("C:\basex\henry\Inventory.xml")/dataroot/Inventory
where $x/BranchNum = $s/BranchNum
return 
<row>
<Branch Number="{$x/data(BranchNum)}" Name="{$x/data(BranchName)}"/>
<Stock Bookcopies="{sum($s/data(OnHand))}"/>
</row>
}
</results>

此代码汇总了所有分支的所有书籍,并为每个分支输出99。

对于分支1我需要27个,对于分支2需要30个等等。

Branch.xml

<?xml version="1.0" encoding="UTF-8" ?>
<dataroot>
  <Branch>
    <BranchNum>1</BranchNum>
    <BranchName>Henry Downtown</BranchName>
    <BranchLocation>16 Riverview</BranchLocation>
    <NumEmployees>10</NumEmployees>
  </Branch>
  <Branch>
    <BranchNum>2</BranchNum>
    <BranchName>Henry On The Hill</BranchName>
    <BranchLocation>1289 Bedford</BranchLocation>
    <NumEmployees>6</NumEmployees>
  </Branch>
  <Branch>
    <BranchNum>3</BranchNum>
    <BranchName>Henry Brentwood</BranchName>
    <BranchLocation>Brentwood Mall</BranchLocation>
    <NumEmployees>15</NumEmployees>
  </Branch>
  <Branch>
    <BranchNum>4</BranchNum>
    <BranchName>Henry Eastshore</BranchName>
    <BranchLocation>Eastshore Mall</BranchLocation>
    <NumEmployees>9</NumEmployees>
  </Branch>
</dataroot>

Inventory.xml

<?xml version="1.0" encoding="UTF-8" ?>
<dataroot>
  <Inventory>
    <BookCode>0180</BookCode>
    <BranchNum>1</BranchNum>
    <OnHand>2</OnHand>
  </Inventory>
  <Inventory>
    <BookCode>0189</BookCode>
    <BranchNum>2</BranchNum>
    <OnHand>2</OnHand>
  </Inventory>
  <Inventory>
    <BookCode>0200</BookCode>
    <BranchNum>1</BranchNum>
    <OnHand>1</OnHand>
  </Inventory>
  <Inventory>
    <BookCode>0200</BookCode>
    <BranchNum>2</BranchNum>
    <OnHand>3</OnHand>
  </Inventory>
  <Inventory>
    <BookCode>0378</BookCode>
    <BranchNum>3</BranchNum>
    <OnHand>2</OnHand>
  </Inventory>
  <Inventory>
    <BookCode>079X</BookCode>
    <BranchNum>2</BranchNum>
    <OnHand>1</OnHand>
  </Inventory>
  <Inventory>
    <BookCode>079X</BookCode>
    <BranchNum>3</BranchNum>
    <OnHand>2</OnHand>
  </Inventory>
  <Inventory>
    <BookCode>079X</BookCode>
    <BranchNum>4</BranchNum>
    <OnHand>3</OnHand>
  </Inventory>
  <Inventory>
    <BookCode>0808</BookCode>
    <BranchNum>2</BranchNum>
    <OnHand>1</OnHand>
  </Inventory>
  <Inventory>
    <BookCode>1351</BookCode>
    <BranchNum>2</BranchNum>
    <OnHand>4</OnHand>
  </Inventory>
  <Inventory>
    <BookCode>1351</BookCode>
    <BranchNum>3</BranchNum>
    <OnHand>2</OnHand>
  </Inventory>
  <Inventory>
    <BookCode>1382</BookCode>
    <BranchNum>2</BranchNum>
    <OnHand>1</OnHand>
  </Inventory>
  <Inventory>
    <BookCode>138X</BookCode>
    <BranchNum>2</BranchNum>
    <OnHand>3</OnHand>
  </Inventory>
  <Inventory>
    <BookCode>2226</BookCode>
    <BranchNum>1</BranchNum>
    <OnHand>3</OnHand>
  </Inventory>
  <Inventory>
    <BookCode>2226</BookCode>
    <BranchNum>3</BranchNum>
    <OnHand>2</OnHand>
  </Inventory>
  <Inventory>
    <BookCode>2226</BookCode>
    <BranchNum>4</BranchNum>
    <OnHand>1</OnHand>
  </Inventory>
  <Inventory>
    <BookCode>2281</BookCode>
    <BranchNum>4</BranchNum>
    <OnHand>3</OnHand>
  </Inventory>
  <Inventory>
    <BookCode>2766</BookCode>
    <BranchNum>3</BranchNum>
    <OnHand>2</OnHand>
  </Inventory>
  <Inventory>
    <BookCode>2908</BookCode>
    <BranchNum>1</BranchNum>
    <OnHand>3</OnHand>
  </Inventory>
  <Inventory>
    <BookCode>2908</BookCode>
    <BranchNum>4</BranchNum>
    <OnHand>1</OnHand>
  </Inventory>
  <Inventory>
    <BookCode>3350</BookCode>
    <BranchNum>1</BranchNum>
    <OnHand>2</OnHand>
  </Inventory>
  <Inventory>
    <BookCode>3743</BookCode>
    <BranchNum>2</BranchNum>
    <OnHand>1</OnHand>
  </Inventory>
  <Inventory>
    <BookCode>3906</BookCode>
    <BranchNum>2</BranchNum>
    <OnHand>1</OnHand>
  </Inventory>
  <Inventory>
    <BookCode>3906</BookCode>
    <BranchNum>3</BranchNum>
    <OnHand>2</OnHand>
  </Inventory>
  <Inventory>
    <BookCode>5163</BookCode>
    <BranchNum>1</BranchNum>
    <OnHand>1</OnHand>
  </Inventory>
  <Inventory>
    <BookCode>5790</BookCode>
    <BranchNum>4</BranchNum>
    <OnHand>2</OnHand>
  </Inventory>
  <Inventory>
    <BookCode>6128</BookCode>
    <BranchNum>2</BranchNum>
    <OnHand>4</OnHand>
  </Inventory>
  <Inventory>
    <BookCode>6128</BookCode>
    <BranchNum>3</BranchNum>
    <OnHand>3</OnHand>
  </Inventory>
  <Inventory>
    <BookCode>6328</BookCode>
    <BranchNum>2</BranchNum>
    <OnHand>2</OnHand>
  </Inventory>
  <Inventory>
    <BookCode>669X</BookCode>
    <BranchNum>1</BranchNum>
    <OnHand>1</OnHand>
  </Inventory>
  <Inventory>
    <BookCode>6908</BookCode>
    <BranchNum>2</BranchNum>
    <OnHand>2</OnHand>
  </Inventory>
  <Inventory>
    <BookCode>7405</BookCode>
    <BranchNum>3</BranchNum>
    <OnHand>2</OnHand>
  </Inventory>
  <Inventory>
    <BookCode>7443</BookCode>
    <BranchNum>4</BranchNum>
    <OnHand>1</OnHand>
  </Inventory>
  <Inventory>
    <BookCode>7559</BookCode>
    <BranchNum>2</BranchNum>
    <OnHand>2</OnHand>
  </Inventory>
  <Inventory>
    <BookCode>8092</BookCode>
    <BranchNum>3</BranchNum>
    <OnHand>1</OnHand>
  </Inventory>
  <Inventory>
    <BookCode>8720</BookCode>
    <BranchNum>1</BranchNum>
    <OnHand>3</OnHand>
  </Inventory>
  <Inventory>
    <BookCode>9611</BookCode>
    <BranchNum>1</BranchNum>
    <OnHand>2</OnHand>
  </Inventory>
  <Inventory>
    <BookCode>9627</BookCode>
    <BranchNum>3</BranchNum>
    <OnHand>5</OnHand>
  </Inventory>
  <Inventory>
    <BookCode>9627</BookCode>
    <BranchNum>4</BranchNum>
    <OnHand>2</OnHand>
  </Inventory>
  <Inventory>
    <BookCode>9701</BookCode>
    <BranchNum>1</BranchNum>
    <OnHand>2</OnHand>
  </Inventory>
  <Inventory>
    <BookCode>9701</BookCode>
    <BranchNum>2</BranchNum>
    <OnHand>1</OnHand>
  </Inventory>
  <Inventory>
    <BookCode>9701</BookCode>
    <BranchNum>3</BranchNum>
    <OnHand>3</OnHand>
  </Inventory>
  <Inventory>
    <BookCode>9701</BookCode>
    <BranchNum>4</BranchNum>
    <OnHand>2</OnHand>
  </Inventory>
  <Inventory>
    <BookCode>9882</BookCode>
    <BranchNum>3</BranchNum>
    <OnHand>3</OnHand>
  </Inventory>
  <Inventory>
    <BookCode>9883</BookCode>
    <BranchNum>2</BranchNum>
    <OnHand>3</OnHand>
  </Inventory>
  <Inventory>
    <BookCode>9883</BookCode>
    <BranchNum>4</BranchNum>
    <OnHand>2</OnHand>
  </Inventory>
  <Inventory>
    <BookCode>9931</BookCode>
    <BranchNum>1</BranchNum>
    <OnHand>2</OnHand>
  </Inventory>
</dataroot>
mysql sql xquery
1个回答
1
投票

当你做sum($s/data(OnHand)时,$s被绑定到doc("C:\basex\henry\Inventory.xml")/dataroot/Inventory,也就是整个库存。尝试更换

let $s := doc("C:\basex\henry\Inventory.xml")/dataroot/Inventory
where $x/BranchNum = $s/BranchNum

通过

let $s := doc("C:\basex\henry\Inventory.xml")/dataroot/Inventory
[BranchNum =  $x/BranchNum]

因此变量仅绑定到库存的选定子集。

顺便说一句,doc()的论点应该是一个URI,而不是一个Windows文件名,但我猜你所选择的XQuery处理器让你侥幸逃脱,或者你不会有这么远。

© www.soinside.com 2019 - 2024. All rights reserved.