我该如何更新? 在我的XML中根据给定的文件名

问题描述 投票:2回答:1
<annotation>
  <folder>cars_train</folder>
  <filename>00001.jpg</filename>
  <path>Users/hantaoliu/Documents/Research/cars_train/.jpg</path>
  <source>
    <database>Unknown</database>
  </source>
  <size>

上面的文本是我想要更新的XML文件之一。我有7k XML文件,我希望它们的路径是:

Users/hantaoliu/Documents/Research/cars_train/[email protected]

$@对应于输入文件的名称。例如,如果输入文件是00001.xml,我希望路径为:

Users/hantaoliu/Documents/Research/cars_train/00001.jpg

我正在使用xmlstarlet,但我无法解决这个问题?

xml linux xmlstarlet
1个回答
1
投票

你可以这样完成你想要的。首先选择filename的值和path的值。

$ filenameVal=$(xmlstarlet sel -t -v "/annotation/filename" file)
$ pathVal=$(xmlstarlet sel -t -v "/annotation/path" file)

接下来通过path确定$(dirname $pathVal)的目录名称并将$filenameVal连接到它。您可以在不编辑文件的情况下对此进行测试运行,如下所示:

$ xmlstarlet ed -u "/annotation/path" -v "$(dirname $pathVal)/$filenameVal" file
<?xml version="1.0"?>
<annotation>
  <folder>cars_train</folder>
  <filename>00001.jpg</filename>
  <path>Users/hantaoliu/Documents/Research/cars_train/00001.jpg</path>
  <source>
    <database>Unknown</database>
  </source>
  <size>
  </size>
</annotation>

如果事情看起来不错,你可以添加-L开关,告诉xmlstartlet进行编辑。

$ xmlstarlet ed -L -u "/annotation/path" -v "$(dirname $pathVal)/$filenameVal" file

file中确认结果:

$ cat file
<?xml version="1.0"?>
<annotation>
  <folder>cars_train</folder>
  <filename>00001.jpg</filename>
  <path>Users/hantaoliu/Documents/Research/cars_train/00001.jpg</path>
  <source>
    <database>Unknown</database>
  </source>
  <size>
  </size>
</annotation>

References

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