Xml文件处理-xmlstarlet属性划分(用于图片标注)
Xml file handling - xmlstarlet attribute division (for image annotation)
我有一个 XML 文件(如下所示)
<annotation>
<folder>Definitiva</folder>
<filename>armas (1)</filename>
<path>C:\Users\Rob\Desktop\Definitiva\armas (1).jpg</path>
<source>
<database>Unknown</database>
</source>
<size>
<width>240</width>
<height>145</height>
<depth>3</depth>
</size>
<segmented>0</segmented>
<object>
<name>pistol</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>3</xmin>
<ymin>1</ymin>
<xmax>128</xmax>
<ymax>100</ymax>
</bndbox>
</object>
并且我想让边界框坐标从相对坐标变为绝对坐标。换句话说,我需要通过将其当前值 (=3) 除以图像的宽度 (=240) 来更新 xmin 值。我正在使用 xmlstarlet 和 bash(我做了其他更简单的修改并且运行良好)但是我编写的脚本产生了一个错误(实际上,它完全删除了 xmin 属性)。你知道出了什么问题吗?
for name in *.xml; do X='/annotation/object/bndbox/xmin'
Y='/annotation/size/width' Z=$X/$Y xmlstarlet ed --inplace -u
'/annotation/object/bndbox/xmin' -v "$Z" "$name"; done
谢谢。
xmlstarlet
解法:
xmlstarlet ed -u '/annotation/object/bndbox/xmin' -x '. div /annotation/size/width' input.xml
输出(用于演示目的):
<?xml version="1.0"?>
<annotation>
<folder>Definitiva</folder>
<filename>armas (1)</filename>
<path>C:\Users\Rob\Desktop\Definitiva\armas (1).jpg</path>
<source>
<database>Unknown</database>
</source>
<size>
<width>240</width>
<height>145</height>
<depth>3</depth>
</size>
<segmented>0</segmented>
<object>
<name>pistol</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>0.0125</xmin>
<ymin>1</ymin>
<xmax>128</xmax>
<ymax>100</ymax>
</bndbox>
</object>
</annotation>
div
- Xpath算术除法运算符(<operand_1> div <operand_2>
)
我有一个 XML 文件(如下所示)
<annotation>
<folder>Definitiva</folder>
<filename>armas (1)</filename>
<path>C:\Users\Rob\Desktop\Definitiva\armas (1).jpg</path>
<source>
<database>Unknown</database>
</source>
<size>
<width>240</width>
<height>145</height>
<depth>3</depth>
</size>
<segmented>0</segmented>
<object>
<name>pistol</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>3</xmin>
<ymin>1</ymin>
<xmax>128</xmax>
<ymax>100</ymax>
</bndbox>
</object>
并且我想让边界框坐标从相对坐标变为绝对坐标。换句话说,我需要通过将其当前值 (=3) 除以图像的宽度 (=240) 来更新 xmin 值。我正在使用 xmlstarlet 和 bash(我做了其他更简单的修改并且运行良好)但是我编写的脚本产生了一个错误(实际上,它完全删除了 xmin 属性)。你知道出了什么问题吗?
for name in *.xml; do X='/annotation/object/bndbox/xmin'
Y='/annotation/size/width' Z=$X/$Y xmlstarlet ed --inplace -u
'/annotation/object/bndbox/xmin' -v "$Z" "$name"; done
谢谢。
xmlstarlet
解法:
xmlstarlet ed -u '/annotation/object/bndbox/xmin' -x '. div /annotation/size/width' input.xml
输出(用于演示目的):
<?xml version="1.0"?>
<annotation>
<folder>Definitiva</folder>
<filename>armas (1)</filename>
<path>C:\Users\Rob\Desktop\Definitiva\armas (1).jpg</path>
<source>
<database>Unknown</database>
</source>
<size>
<width>240</width>
<height>145</height>
<depth>3</depth>
</size>
<segmented>0</segmented>
<object>
<name>pistol</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>0.0125</xmin>
<ymin>1</ymin>
<xmax>128</xmax>
<ymax>100</ymax>
</bndbox>
</object>
</annotation>
div
- Xpath算术除法运算符(<operand_1> div <operand_2>
)