From f1922960a0aa9ad3cede1f7267e31d736895f134 Mon Sep 17 00:00:00 2001 From: Daniel Friesel Date: Wed, 16 Nov 2011 11:46:19 +0100 Subject: Detect ambiguous input errors --- Changelog | 4 ++++ lib/Travel/Status/DE/DeutscheBahn.pm | 27 +++++++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/Changelog b/Changelog index 24c36ca..22a6e2b 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 bf7ba56..4e9004d 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) = @_; -- cgit v1.2.3