我有一份包含以下数据的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>
感谢您的帮助。
答案 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树更笨重,但是如果你想在树的不同层面上更改更多细节,它会变得很方便。