2013-02-06 52 views
-1

我知道SO并不尊重这种类型的问题,但我已经投入了大量时间来尝试为perl选择最佳的XML操作库,并且几乎没有我发现的expample提供了一个清晰的理解关于如何插入值并将生成的xml打印到字符串变量中。perl中的简单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的字符串。

回答

3

这是一个SOAP请求,对吧?

如果只是这一个简单的SOAP调用看起来总是一样的,我建议你使用模板引擎,放在占位符与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

只要你能确保替换值是正确的XML('''和'&'转义为'<'和'&',没有非法字符等) –

+0

@IanRoberts是的,当然你的对了,谢谢。我试图把重点放在哪种方法最适合问题的规模。 – simbabque

+1

+1我同意这是一个很好的方法,如果它是小而简单的东西。不过,如果您要做各种各样的请求,XML解析器将更加灵活。 – 2013-02-06 12:16:08