script-examples/__relpipe_in_filesystem_script_xpath
branchv_0
changeset 28 9172bd97ae99
--- /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 <http://www.gnu.org/licenses/>.
+
+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;
+	}
+}