我有以下代码擦除肥皂信封和主体和保持根的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"
}
}
答案 0 :(得分:1)
XML::Twig的a simplify
method与XML::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
生成数据结构