我正在尝试比较两个 xml 文件并仅将某个键更新为新文件。当我导出 zabbix 模板并尝试在另一个环境中导入时,会出现此问题,状态应保留为目标之一。假设我有两个 xml 文件,
源代码.xml
<zabbix_export>
<version>5.0</version>
<groups>
<group>
<name>zabbix</name>
</group>
</groups>
<templates>
<template>
<template>testtemp</template>
<name>testtemp</name>
<groups>
<group>
<name>zabbix</name>
</group>
</groups>
<items>
<item>
<name>test1</name>
<key>kernel.maxproc</key>
<triggers>
<trigger>
<expression>{last()}=0</expression>
<name>testtrig1</name>
</trigger>
<trigger>
<expression>{last()}=100</expression>
<name>testtrig2</name>
</trigger>
</triggers>
</item>
</items>
</template>
</templates>
</zabbix_export>
目的地.xml
<version>5.0</version>
<groups>
<group>
<name> zabbix </name>
</group>
</groups>
<templates>
<template>
<template>testtemp</template>
<name>testtemp</name>
<groups>
<group>
<name>zabbix</name>
</group>
</groups>
<items>
<item>
<name>test1</name>
<key>kernel.maxproc</key>
<triggers>
<trigger>
<expression>{last()}=0</expression>
<name>testtrig1</name>
<status>DISABLED</status>
</trigger>
</triggers>
</item>
</items>
</template>
</templates>
</zabbix_export>
所以我的目标是创建一个新文件并将键/值“禁用”如下所示。
最终的.xml
<zabbix_export>
<version>5.0</version>
<groups>
<group>
<name>zabbix</name>
</group>
</groups>
<templates>
<template>
<template>testtemp</template>
<name>testtemp</name>
<groups>
<group>
<name>zabbix</name>
</group>
</groups>
<items>
<item>
<name>test1</name>
<key>kernel.maxproc</key>
<triggers>
<trigger>
<expression>{last()}=0</expression>
<name>testtrig1</name>
<status>DISABLED</status>
</trigger>
<trigger>
<expression>{last()}=100</expression>
<name>testtrig2</name>
</trigger>
</triggers>
</item>
</items>
</template>
</templates>
</zabbix_export>
我在使用 xmlstarlet 更新两个 xml 文件的帖子中找到了实现此行为的最接近的方法之一,但仍然需要一点点接触。所以使用 'xmlstarlet' 似乎更好,因为我需要在 Debian 本地运行这个宝贝。
至少提供一个线索如何以这种方式使用它会很棒。
提前致谢,