是否有 basex 函数可以随机删除 XML 文件的部分内容?
Is there a basex function to randomly erase parts of an XML file?
我有一个包含 X 条注释的 XML 文件,我想随机编辑它以使其少于 X 条。对于实际问题:我有 40 个注释,我希望最终只有 7 个,随机选择这些注释。我的每个文件都有不同的原始注释数量,但我希望最后总是有七个。每个注释如下所示:
<ndpviewstate id="1">
<title>1</title>
<details/>
<coordformat>nanometers</coordformat>
<lens>0.480769</lens>
<x>21841504</x>
<y>-2550259</y>
<z>0</z>
<showtitle>1</showtitle>
<showhistogram>0</showhistogram>
<showlineprofile>0</showlineprofile>
<annotation type="circle" displayname="AnnotateCircle" color="#000000">
<x>16893748</x>
<y>79968</y>
<radius>545000</radius>
<measuretype>0</measuretype>
</annotation>
</ndpviewstate>
我是 XML 和 BaseX(版本 9.4.5)的绝对初学者,因此欢迎任何帮助。
提前致谢,
圭多
可以使用 XQuery update and this includes deleting nodes. XQuery update is best fitted to working on databases rather than files. However one can read a file, use transform with 在 BaseX 中更新 XML,然后保存结果
关于随机选择物品:我建议使用BaseX的random module
将这些放在一起并假设注释元素都在同一级别
(: return items from $seq after removing $max items at random :)
declare function local:excess($seq,$max as xs:integer){
random:seeded-permutation(random:integer(),$seq)
=>subsequence($max+1)
};
let $f:=doc(".../file.xml")
let $updated:= $f transform with {
delete node local:excess(/ndpviewstate/annotation,7)
}
return $updated
我有一个包含 X 条注释的 XML 文件,我想随机编辑它以使其少于 X 条。对于实际问题:我有 40 个注释,我希望最终只有 7 个,随机选择这些注释。我的每个文件都有不同的原始注释数量,但我希望最后总是有七个。每个注释如下所示:
<ndpviewstate id="1">
<title>1</title>
<details/>
<coordformat>nanometers</coordformat>
<lens>0.480769</lens>
<x>21841504</x>
<y>-2550259</y>
<z>0</z>
<showtitle>1</showtitle>
<showhistogram>0</showhistogram>
<showlineprofile>0</showlineprofile>
<annotation type="circle" displayname="AnnotateCircle" color="#000000">
<x>16893748</x>
<y>79968</y>
<radius>545000</radius>
<measuretype>0</measuretype>
</annotation>
</ndpviewstate>
我是 XML 和 BaseX(版本 9.4.5)的绝对初学者,因此欢迎任何帮助。
提前致谢, 圭多
可以使用 XQuery update and this includes deleting nodes. XQuery update is best fitted to working on databases rather than files. However one can read a file, use transform with 在 BaseX 中更新 XML,然后保存结果
关于随机选择物品:我建议使用BaseX的random module
将这些放在一起并假设注释元素都在同一级别
(: return items from $seq after removing $max items at random :)
declare function local:excess($seq,$max as xs:integer){
random:seeded-permutation(random:integer(),$seq)
=>subsequence($max+1)
};
let $f:=doc(".../file.xml")
let $updated:= $f transform with {
delete node local:excess(/ndpviewstate/annotation,7)
}
return $updated