From 04d1920019a6caf1b3cd8aa70a8b220e7e355c1c Mon Sep 17 00:00:00 2001 From: dakkar Date: Mon, 29 Jul 2013 20:34:01 +0100 Subject: parse TXC to dot --- parse-TransXChange.pl | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 parse-TransXChange.pl diff --git a/parse-TransXChange.pl b/parse-TransXChange.pl new file mode 100644 index 0000000..6426cba --- /dev/null +++ b/parse-TransXChange.pl @@ -0,0 +1,36 @@ +#!/usr/bin/env perl +use strict; +use warnings; +use 5.014; +use XML::LibXML; +use XML::LibXML::XPathContext; +use Data::Printer; + +my $parser=XML::LibXML->new; +my $doc=$parser->load_xml(location=>$ARGV[0]); +my $xpath = XML::LibXML::XPathContext->new(); +$xpath->registerNs('t','http://www.transxchange.org.uk/'); + +sub stop_point { + my ($ref) = @_; + return $xpath->findvalue("/t:TransXChange/t:StopPoints/t:AnnotatedStopPointRef[t:StopPointRef='$ref']/t:CommonName/text()",$doc); +} + +my %links; +my @sections = $xpath->findnodes('/t:TransXChange/t:RouteSections/t:RouteSection',$doc); +for my $section (@sections) { + for my $link ($xpath->findnodes('t:RouteLink',$section)) { + my ($from) = stop_point($xpath->findnodes('t:From/t:StopPointRef/text()',$link)); + my ($to) = stop_point($xpath->findnodes('t:To/t:StopPointRef/text()',$link)); + $links{$from}->{$to}=1; + } +} + +say 'digraph {'; +for my $from (keys %links) { + for my $to (keys %{$links{$from}}) { + printf qq{"%s" -> "%s"\n}, + $from,$to; + } +} +say '}'; -- cgit v1.2.3