gpt4 book ai didi

xml - AIX 中最简单的嵌套 XML 解析

转载 作者:太空宇宙 更新时间:2023-11-04 10:42:31 27 4
gpt4 key购买 nike

我正在尝试在 Unix 中创建一个脚本来解析嵌套的 XML。示例如下:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<deployments>
<appName>apptest</appName>
<envVariable>app</envVariable>
<fileSourceFolder>/sourceTest</fileSourceFolder>
<fileBackupFolder>/testbackup</fileBackupFolder>
<requireRestart>false</requireRestart>
<restartCommandPath>bin</restartCommandPath>
<deployment-files>
<deployment-file>
<deploymentFolder>deployment-folder</deploymentFolder>
<fileName>test-file</fileName>
</deployment-file>
</deployment-files>
<restart-commands>
<restart-command>
<commandName>./appstop</commandName>
</restart-command>
<restart-command>
<commandName>./appstart</commandName>
</restart-command>
</restart-commands>
</deployments>

我需要遍历 deployment-filesrestart-command 元素。我阅读了有关使用 Perl 的信息,安装的版本是 5.8.8。但是,由于缺少库,我无法在 perl 中使用 TWIG 和其他 XML 内容。我也读过其他东西,比如 xml_grep、xmllint 等,但这些东西没有安装在我使用的机器上,而且由于很多限制,我无法手动安装甚至请求它。

我已经根据 http://interoperating.info/courses/perl4data/node/26 中的示例尝试使用 XML::Simple但还是不行。

请建议如何为此创建最简单的 perl 或 shell 脚本,并请提供引用。我仍然是 shell 脚本的新手,我昨天才开始探索 perl,所以我将感谢您的所有帮助。谢谢。

最佳答案

看,我知道你说过“我无法安装东西”——但你遇到的问题是你试图在没有解析器的情况下解析 XML,而且你使用的是 7 年前的 perl 版本是生命的尽头。 Perl 5.8.8 is end of life, and released in 2008 .

无论您多么努力,这都不是通往好的解决方案的途径 - 使用解析器,这会变得非常简单:

#!/usr/bin/env perl
use strict;
use warnings;
use XML::Twig;

my $twig = XML::Twig -> new -> parse ( \*DATA );
foreach my $deployment_files ( $twig -> get_xpath ( '//deployment-file' ) ) {
print $deployment_files -> first_child_text('deploymentFolder'), " => ";
print $deployment_files -> first_child_text('fileName');
print "\n";
}

foreach my $restart_command ( $twig -> get_xpath ( '//restart-command/commandName' ) ) {
print $restart_command -> text,"\n";
}

__DATA__
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<deployments>
<appName>apptest</appName>
<envVariable>app</envVariable>
<fileSourceFolder>/sourceTest</fileSourceFolder>
<fileBackupFolder>/testbackup</fileBackupFolder>
<requireRestart>false</requireRestart>
<restartCommandPath>bin</restartCommandPath>
<deployment-files>
<deployment-file>
<deploymentFolder>deployment-folder</deploymentFolder>
<fileName>test-file</fileName>
</deployment-file>
</deployment-files>
<restart-commands>
<restart-command>
<commandName>./appstop</commandName>
</restart-command>
<restart-command>
<commandName>./appstart</commandName>
</restart-command>
</restart-commands>
</deployments>

如果没有解析器,您首先...必须编写一个解析器。你可以这样做 - 规范定义明确。但实际上,当有几个现成可用且经过测试且工作良好的 XML 解析器时,没有任何意义。但即使你这样做了,你也会遇到一个 7 岁的口译员。进行 perl 的源代码构建并安装在备用位置确实不难。

所以我建议这里的正确答案包括请求必要的元素来完成体面的工作。你不会指望木匠绕过你的锤子用锤子砸螺丝,因为他懒得去买 Screwdriver ,你会吗?

关于xml - AIX 中最简单的嵌套 XML 解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34411654/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com