XML值变量

时间:2018-02-08 22:06:38

标签: perl cgi

我有一个返回XML结果的perl脚本,我正在尝试将这些值设置为变量但是我甚至无法将它们分开,即使使用XML :: Simple

我试过了: “print $ xml-> {”to“} {”from“} {”heading“} {”body“}。”\ n“;”

返回XML值没有运气,但我需要将它们设置为变量:

  1. $到
  2. 从$
  3. 航向$
  4. $体
  5. 这就是我所拥有的:

    #!/usr/bin/perl
    
    print "Content-type: text/html\n\n";
    
    use strict;
    use warnings;
    use LWP::Simple;
    use XML::Simple;
    
    my $xml;
    
    my $XML_Server = "http://videotuber.atwebpages.com/cgi-bin/cgitest.pl";
    my $UserContent = get($XML_Server);
    
    
    print qq~$UserContent \n\n~;
    
    
    print $xml->{"to"}{"from"}{"heading"}{"body"} . "\n";
    

1 个答案:

答案 0 :(得分:4)

有很多事情让人们很难帮助你:

  1. 您没有包含XML输入的示例
  2. 您没有包含代码预期输出的示例
  3. 您提供的网址包含无效的XML
  4. 您正在尝试使用XML :: Simple - 没有人建议
  5. 您显然不了解Perl引用,因此您只是编造$xml->{"to"}{"from"}{"heading"}{"body"}并说它不起作用
  6. 我建议更改生成您要提取的URL的代码,以创建有效的XML(<?xml ...

    之前没有空白行

    我还建议使用XML :: LibXML。这是a tutorial

    这里有一些代码可以帮助你入门:

    #!/usr/bin/perl
    
    use strict;
    use warnings;
    
    use LWP::Simple;
    use XML::LibXML;
    
    my $xml_server = "http://videotuber.atwebpages.com/cgi-bin/cgitest.pl";
    my $user_content = get($xml_server);
    
    my $dom = XML::LibXML->load_xml(string => $user_content);
    
    my $to      = $dom->findvalue('/note/to');
    my $from    = $dom->findvalue('/note/from');
    my $heading = $dom->findvalue('/note/heading');
    my $body    = $dom->findvalue('/note/body');
    
    print "To:      $to\n";
    print "From:    $from\n";
    print "Heading: $heading\n";
    print "Body:    $body\n";
    

    修改

    对于后代,引用URL返回的XML返回如下内容:

    <?xml version="1.0" encoding="UTF-8"?>
    <note>
      <to>alice</to>
      <from>bob</from>
      <heading>reminder</heading>
      <body>don't forget the milk</body>
    </note>
    

    (但在初始XML声明之前有一个空行)