Xquery - 序号

时间:2014-03-21 11:13:51

标签: xquery

我有一份包含以下数据的XML文档。我需要做的是显示这个。对于每个新工厂,应添加名为id的属性以显示序号。第一种植物是1种,第二种植物是2种,依此类推。我不知道从哪里开始...任何指导都将不胜感激。

<CATALOG>
<PLANT>
<COMMON>ABC</COMMON>
<BOTANICAL>MNO</BOTANICAL>
<ZONE>4</ZONE>
<LIGHT>Mostly Shady</LIGHT>
</PLANT>
<PLANT>
<COMMON>PQR</COMMON>
<BOTANICAL>FGH</BOTANICAL>
<ZONE>3</ZONE>
<LIGHT>Mostly Shady</LIGHT>
</PLANT>
</CATALOG>

输出应如下所示:

<CATALOG>
<PLANT id="1">
<COMMON>ABC</COMMON>
<BOTANICAL>MNO</BOTANICAL>
<ZONE>4</ZONE>
<LIGHT>Mostly Shady</LIGHT>
</PLANT>
<PLANT  id="2">
<COMMON>PQR</COMMON>
<BOTANICAL>FGH</BOTANICAL>
<ZONE>3</ZONE>
<LIGHT>Mostly Shady</LIGHT>
</PLANT>
</CATALOG>

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

在flowr表达式中使用位置变量:

for $p at $id in //PLANT
return <PLANT id="{$id}">{$p/*}</PLANT>

答案 1 :(得分:1)

如果您可以访问 XQuery更新,则还可以更改原始文档。

for $plant at $id in /CATALOG/PLANT
return insert node attribute id { $id } into $plant

或使用 XQuery Update转换,它只会更改副本:

copy $result := /.
modify (
  for $plant at $id in $result/CATALOG/PLANT
  return insert node attribute id { $id } into $plant
)
return $result

这比重建像@Ewout Graswinckel那样的XML树更笨重,但是如果你想在树的不同层面上更改更多细节,它会变得很方便。