【发布时间】:2018-03-07 21:06:41
【问题描述】:
我有以下 XML 格式
<object class="Class A">
<directory>someString1</directory>
<attr>
<name>length</name>
<value>6</value>
</attr>
<attr>
<name>parent</name>
<value>1</value>
</attr>
<attr>
<name>Status</name>
<value>1</value>
</attr>
<attr>
<name>className</name>
<value>Class A</value>
</attr>
<attr>
<name>Instance</name>
<value>InstanceValue</value>
</attr>
</object>
...
<object class="Class D">
<directory>someString4</directory>
<attr>
<name>length</name>
<value>8</value>
</attr>
<attr>
<name>parent</name>
<value>1</value>
</attr>
<attr>
<name>Status</name>
<value>1</value>
</attr>
<attr>
<name>className</name>
<value>Class D</value>
</attr>
<attr>
<name>Instance</name>
<value></value>
</attr>
</object>
....
我只需要查找特定的 D 类对象并查找该对象的 Instance 值是否为空,如果为空,则使用作为参数提供的某个值填充。请注意,XML 文件中可以有多个对象,并且 XML 标记的名称和值相当重复。此外,我只需要在 suse Linux 上使用 shell 脚本。
我是 shell 脚本和 SED 的新手。我尽力在stackoverflow中找到现有的问题和答案,但找不到相关的问题和答案。 非常感谢任何帮助。
【问题讨论】:
-
我建议使用 XML/HTML 解析器 (xmlstarlet, xmllint ...)。
-
请将有效的 xml 文件和该示例的所需输出发布到您的问题中。
-
当你说“我只需要使用 shell 脚本”时,你能澄清一下你有什么样的限制吗?通常这意味着“我不能安装任何额外的软件”,但有时它意味着“不允许使用 perl 和 python”,甚至“只允许使用 shell 和简单的命令,如 grep 和 sed 以及他们在课堂上教给我们的任何其他命令”。
-
明确地说,做到这一点的最佳方法涉及真正的 XML 解析器。其中许多都可以从命令行获得(包括
xsltproc,如今许多 Linux 发行版都在提供开箱即用的服务)。
标签: xml linux shell sed scripting