xml - 如何根据给定的文件名更新 XML 中的 <path>

标签 xml linux xmlstarlet

<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/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="1236523c786275" rel="noreferrer noopener nofollow">[email protected]</a>

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

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

我正在使用 xmlstarlet,但我无法弄清楚它?

最佳答案

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

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

接下来通过 $(dirname $pathVal) 确定 path 的目录名称,并将 $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

确认文件中的结果:

$ 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>

引用文献

关于xml - 如何根据给定的文件名更新 XML 中的 <path>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52158112/

相关文章:

bash - 在文件的每一行上运行命令

java - GData 错误 : Intermittent "Invalid root element"

java - 使用 Java 的 XPath - 在子标签之间选择文本值

xml - 如何在 xmlstarlet 中执行条件语句

linux - tty1 出现 "permission denied"的原因可能是什么?

linux - Linux 中命令行选项的正负形式是什么

xmlstarlet - 如何使用 XMLStarlet 在另一个元素之后直接插入一个元素?

javascript - 无法使用 jQuery 从外部文件加载 xml

java - 膨胀新 fragment 时出错

linux - 使用 JavaScript 从控制台分离 Nodejs x11 应用程序