diff -r 532953173cd5 -r 9172bd97ae99 script-examples/__relpipe_in_filesystem_script_xpath --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/script-examples/__relpipe_in_filesystem_script_xpath Mon Nov 11 14:42:13 2019 +0100 @@ -0,0 +1,51 @@ +#!/usr/bin/perl + +# Relational pipes +# Copyright © 2019 František Kučera (Frantovo.cz, GlobalCode.info) +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, version 3 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +use strict; +use warnings; + +use XML::LibXML; # documentation: https://metacpan.org/pod/XML::LibXML + +if (@ARGV == 0) { + print "1\n"; + if ($ENV{type}) { print "$ENV{type}\n"; } else { print "string\n"; } +} else { + my $dom = XML::LibXML->new->parse_file($ARGV[0]); + my $xpath = XML::LibXML::XPathContext->new($dom); + + # You can add your favorite XML namespaces here: + # $xpath->registerNs('relpipe', 'tag:globalcode.info,2018:relpipe'); + # $xpath->registerNs('xhtml', 'http://www.w3.org/1999/xhtml'); + # $xpath->registerNs('svg', 'http://www.w3.org/2000/svg'); + # $xpath->registerNs('atom', 'http://www.w3.org/2005/Atom'); + # $xpath->registerNs('maven', 'http://maven.apache.org/POM/4.0.0'); + # + # Or set environmental variables: + # export xmlns_r='tag:globalcode.info,2018:relpipe' + + # Load XML namespaces from options: + # usage: --option 'env:xmlns_r' 'tag:globalcode.info,2018:relpipe' → r="tag:globalcode.info,2018:relpipe" + for my $name (keys %ENV) { + if ($name =~ /xmlns_(.*)/) { $xpath->registerNs($1, $ENV{$name}); } + } + + # Execute XPath and concatenate results (usually should be only one): + # usage: --option env:xpath '//r:name' + for my $value ($xpath->find($ENV{xpath})) { + print $value; + } +}