Thread skript-fehlersuche (23 answers)
Opened by turbo at 2011-11-25 15:24

topeg
 2011-11-27 16:53
#154489 #154489
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Das Problem ist, dass LibXML für eine Objekt nur einmal eine Datei parsed. (Ich meine mich zu erinnern, dass alle weiteren Geparsten Strukturen werden an die vorhanden angehängt, aber genau weiß ich es nicht.) Wenn man das selbe Objekt für ein anderes XML verwenden will muss man das Objekt "zurück setzen".
Einfacher ist es ein neues Objekt zu erzeugen.

Hier mal der Code etwas aufgeräumt.
more (19.7kb):
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#!/usr/bin/perl

use strict;
use warnings;

use XML::LibXML;
use LWP::UserAgent;

#-- Parameter ---------------------------------------------------------#
my $strTempFileName            = '/tmp/wowza%s.xml';
my $strURL                     = 'http://%s:8086/connectioncounts.xml';
my $strLogger                  = '/var/log/wowzaGrabber.log';

my $strType                    = "Customer";
my $strStreamorCustomerElement = "ConnectionsCurrent";

my $pass                       = "passwd";
my $user                       = "user";
my $port                       = "port";

#----------------------------------------------------------------------#

my $strKundeorStream           = shift(@ARGV);
my @strServerIp                = @ARGV;

my $httpGet   = LWP::UserAgent->new;
$httpGet->agent('ReportsBot/1.01');

for my $strItem (@strServerIp)
{
  my $strUrl = sprintf($strURL,$strItem);
  my $strTempFile = sprintf($strTempFileName,$strItem);

  #-Get Datasource-----------------------------------------------------#
  $httpGet->credentials(
                          "$strItem:$port",
                          'Wowza Media Systems',
                          $user, $pass
                        );
  my $response = $httpGet->get($strUrl);

  if($response->is_error())
  {
    warn("ERROR load XML: ($strItem) ". $response->status_line() );
    next;
  }

  #-Write Tempfile-----------------------------------------------------#
  if( open(my $fh, '>', $strTempFile) )
  {
     print $fh $response->decoded_content;
     close $fh;
  }
  else
  { warn("ERROR OPEN $strTempFile ($!)\n"); }

  #-MAIN---------------------------------------------------------------#
  my $output = parseXml(
      $response->decoded_content,
      $strKundeorStream,
      $strStreamorCustomerElement,
      $strType
    );
  print $output;
}


########################################################################

sub parseXml
{
  my $strContent=shift;
  my $strKundeorStream = shift;
  my $strStreamorCustomerElement = shift;
  my $strType = shift;

  my $xmlStruct = XML::LibXML->load_xml(string => $strContent);

  unless($xmlStruct)
  {
    warn("ERROR PARSE XML!");
    return '';
  }

  my $xmlRootElement = $xmlStruct -> getDocumentElement();
  my $xmlRootElementName = $xmlRootElement -> getName();

  my $strLine = "";

  foreach my $ChildElement ($xmlRootElement->getElementsByTagName("Application"))
  {
    my @arrNodes = $ChildElement->getElementsByTagName("Name");
    if  ($arrNodes[0]->getFirstChild->getData eq $strKundeorStream)
    {
      my @arrNodes = $ChildElement->getElementsByTagName($strStreamorCustomerElement);
      $strLine = $arrNodes[0]->getFirstChild->getData;
      last;
    }
  }

  return $strLine;
}

View full thread skript-fehlersuche