diff --git a/Changelog b/Changelog index 24c36ca2ec077f542013aec70073c954ae144cff..22a6e2b3c939ba25a60c23bd5602e0f6b7614fbc 100644 --- a/Changelog +++ b/Changelog @@ -1,3 +1,7 @@ +git HEAD + + * Detect ambiguous input errors (available via errstr) + Travel::Status::DE::DeutscheBahn 1.00 - Sun Sep 04 2011 [db-ris] diff --git a/lib/Travel/Status/DE/DeutscheBahn.pm b/lib/Travel/Status/DE/DeutscheBahn.pm index bf7ba560a7914c5b82f3cdbe304c31d4c753abff..4e9004d7de7c3eec9a127bffe6a5c9b024655e77 100644 --- a/lib/Travel/Status/DE/DeutscheBahn.pm +++ b/lib/Travel/Status/DE/DeutscheBahn.pm @@ -73,6 +73,8 @@ sub new { suppress_warnings => 1, ); + $ref->check_input_error(); + return $ref; } @@ -96,6 +98,31 @@ sub new_from_html { return bless( $ref, $obj ); } +sub check_input_error { + my ($self) = @_; + + my $xp_errdiv = XML::LibXML::XPathExpression->new( + '//div[@class = "errormsg leftMargin"]'); + my $xp_opts + = XML::LibXML::XPathExpression->new('//select[@class = "error"]'); + my $xp_values = XML::LibXML::XPathExpression->new('./option'); + + my $e_errdiv = ( $self->{tree}->findnodes($xp_errdiv) )[0]; + my $e_opts = ( $self->{tree}->findnodes($xp_opts) )[0]; + + if ($e_errdiv) { + $self->{errstr} = $e_errdiv->textContent; + + if ($e_opts) { + my @nodes = ( $e_opts->findnodes($xp_values) ); + $self->{errstr} + .= join( q{}, map { "\n" . $_->textContent } @nodes ); + } + } + + return; +} + sub errstr { my ($self) = @_;