Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
perl中的简单XML操作_Xml_Perl - Fatal编程技术网

perl中的简单XML操作

perl中的简单XML操作,xml,perl,Xml,Perl,我知道SO不支持这种类型的问题,但我已经花了很多时间尝试为perl选择最佳的XML操作库,而且我发现几乎没有一个EXPAMP可以清楚地理解如何插入值并将结果XML打印到字符串变量 以下是我传入的不带值的XML: my $GetLibByNameAndVersionEnvelope = '<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">

我知道SO不支持这种类型的问题,但我已经花了很多时间尝试为perl选择最佳的XML操作库,而且我发现几乎没有一个EXPAMP可以清楚地理解如何插入值并将结果XML打印到字符串变量

以下是我传入的不带值的XML:

my $GetLibByNameAndVersionEnvelope = '<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
                                            <s:Body>
                                                <GetLibByNameAndVersion xmlns="LibService">
                                                    <name></name>
                                                    <version></version>
                                                </GetGridLibByNameAndVersion>
                                            </s:Body>
                                        </s:Envelope>';

我需要用测试值填充名称和版本节点。请提供一个示例,说明如何执行此操作,因此结果是,我有一个包含所需XML的字符串。

这是一个SOAP请求,对吗

如果只是这一个简单的SOAP调用看起来总是一样的话,我建议您使用一个模板引擎,放入占位符,而不必为XML模块操心。那会便宜得多

您可以使用类似于并将模板放在文件系统中的某个位置,以便将其添加到版本控制中,也可以简单地将其添加到数据部分的代码中,甚至作为一个简单的字符串变量。当然,你可以把它作为一个字符串放进去,如下所示:

my $ua = LWP::UserAgent->new;
my $res = $ua->post($url, <<"SOAP");
<s:Envelope>
  <s:Body>
    <GetLibByNameAndVersion xmlns="LibService">
      <name>$name</name>
      <version>$version</version>
    </GetGridLibByNameAndVersion>
  </s:Body>
</s:Envelope>
SOAP
该示例不是很动态,如果API发生更改,则需要更改代码。但是对于一个非常简单的请求,这是最快的方法。我觉得有时候,如果API中只有一个相当简单的方法,那么这个或模板就是最好的选择。

更新:您知道Perl有一整套专门处理SOAP的模块吗?看起来是个好的开始

Twig上有一个教程列表。我建议,这是旧的,但肯定会涵盖所有你感兴趣的事情

此外,CPAN文档几乎总是有关于如何使用模块的简单示例


这里是。

只要您能确保替换值是格式良好的XML@IanRoberts是的,当然您是对的,谢谢。我试图把重点放在哪种方法最适合问题的规模上。我同意,如果这是一种小而简单的方法,那么这是一种很好的方法。但是,如果要处理各种请求,XML解析器将更加灵活。