在linux中仅比较xml标记

在linux中仅比较xml标记,xml,linux,shell,Xml,Linux,Shell,需要帮助比较xml标记吗 我需要比较Linux环境中的2个xml文件标记。 我只想比较标签,而不是值。 比如说: 1.xml具有 <CSVPrefix> 01 </CSVPrefix> <CSVPostfix> e </CSVPostfix> <CSVLandingZone> xyz </CSVLandingZone> 01 E xyz 2.xml具有 <CSVPostfix>te</CSVPostf

需要帮助比较xml标记吗 我需要比较Linux环境中的2个xml文件标记。 我只想比较标签,而不是值。 比如说:

1.xml具有

<CSVPrefix> 01 </CSVPrefix>
<CSVPostfix> e </CSVPostfix>
<CSVLandingZone> xyz </CSVLandingZone>
01
E
xyz
2.xml具有

 <CSVPostfix>te</CSVPostfix>
 <CSVLandinone>/tmp/csv/</CSVLandingZone>
te
/tmp/csv/
有没有免费的工具可以做这件事? 甚至一段shell脚本也可以,因为这是我们的设置所支持的

目前不支持任何其他语言,因此我无法编写任何py或java代码来进行比较。

步骤1(任何shell):

步骤2(类似bash的内容):


diff。。。您可能可以使用sed、awk和sort以及其他unix/linux命令行工具来组合一些东西。。。但是,Linux附带的任何东西都无法在不付出这些努力的情况下实现您想要的功能。(如果你可以下载一个免费的工具,为什么你不能下载一种编程语言或XSLT处理器或其他适合这个任务的东西呢?)。但是这个免费的工具更多的是为了我个人的验证来加速这个过程。我被要求使用shell使代码非常简单,以便最终用户可以在需要时修改它。只需按照要求执行即可。您可以使用xslt处理器。。。根据Linux版本的不同,可能会安装perl,如果是这样的话,您可以使用perl(1)来轻松地完成此操作。谢谢您的帮助。我要试试这个。
$ xmlstarlet sel -t -m "/some-root/*" -v "name()" -n file1.xml
CSVPrefix
CSVPostfix
CSVLandingZone
diff ... <(xmlstarlet sel ...) <(xmlstarlet sel ...)