perl中的简单XML操作

时间:2013-02-06 11:05:47

标签: xml perl

我知道SO并不尊重这类问题,但我花了很多时间尝试为perl选择最好的XML操作库,几乎没有任何例子我已经发现了如何插入值的清晰理解并将生成的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的字符串。

2 个答案:

答案 0 :(得分:3)

这是一个SOAP请求,对吗?

如果只是这一个简单的SOAP调用总是看起来一样,我建议您使用模板引擎,放入占位符并且不要&# 39;根本不需要使用XML模块。那会更便宜。

您可以使用类似Text::Template的内容并将模板放在文件系统中的某个位置(以便将其添加到版本控制中),或者只是将其添加到DATA部分的代码中,或者甚至简单的字符串变量。你当然可以把它放在这样的字符串中:

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中只有一个相当简单的方法,我觉得有时候这个(或模板)是可行的方法。

答案 1 :(得分:3)

更新:您是否知道Perl有一整套专门用于处理SOAP的模块? This article似乎是一个很好的起点。

XML::Twig有一个关于their website的教程列表。我推荐this tutorial,这是旧的,但肯定会涵盖你感兴趣的所有内容。

此外,CPAN文档几乎总是有关于如何使用模块的简单示例。 XML::Twig's documentation certainly doesSo does XML::Simple

这是an article on using XML::Simple