Perl XML :: Twig将最终输出发送给JSON

时间:2017-09-08 13:52:23

标签: json xml perl

我有以下代码擦除肥皂信封和主体和保持根的XML字符串,我想获取最终输出并发送给JSON。 -thanks

use XML::Twig;
use JSON;

$xml = '<soap:Envelope><Servers>10.20.200.11</Servers></soap:Envelope>';

my $twig = XML::Twig->new( twig_roots => { Servers => 1 },
    twig_handlers => { 
        'soap:Envelope' => sub { $_->erase() },
    },
    pretty_print  => 'indented',
 );

 $twig->parse($xml); 

 my $output = $twig->print;

 $json = JSON->new->allow_nonref;

 $pretty_printed = $json->pretty->encode($output); # <-- This dosen't work!!

 # finally print json
 print $pretty_printed;



So if the XML looks like this - I added a node
$xml = '<Envelope><Servers><Server>10.20.200.11</Server></Servers></Envelope>';

I would expect the JSON to look like this 

 {
   "Servers" : {
        "Server" : "10.20.200.11"
    }
 }

2 个答案:

答案 0 :(得分:1)

XML::Twiga simplify methodXML::Simple类似(不应使用!)。你可以使用它,但它对你的例子没什么帮助。

my $json = JSON->new->allow_nonref;
my $pretty_printed = $json->pretty->encode( $twig->simplify );

这将输出

"10.20.200.11"

这是有效的JSON,但却遗漏了Servers。我期待像

这样的东西
{ "Servers" => "10.20.200.11" }

XML::Simple the KeepRoot option中会这样做,并且XML :: Twig的文档声明应该查看XML :: Simple的文档以获取simplify的选项。

  

返回一个与XML :: Simple相似的数据结构。选项与XMLin选项相同,有关更多详细信息,请参阅XML :: Simple doc(或使用DATA :: dumper或YAML转储数据结构)

然而,does not allow该选项。

更好的计划可能是编写自己的代码,以便根据您想要的格式进行转换。

答案 1 :(得分:0)

 my $output = $twig->print;

我想你想要

 my $output = $twig->sprint;

那里,你得到的是字符串而不是树枝对象(谢谢simbabque)

这只是将变量输出为JSON字符串,而不是从XML

生成数据结构