/// XML grep. library; import 'dart:io'; import 'package:args/args.dart' as args; import 'package:xml/xml.dart'; final args.ArgParser argumentParser = args.ArgParser() ..addOption('tag', abbr: 't', help: 'Filter by tag name.', defaultsTo: '*') ..addOption( 'namespace', abbr: 'n', help: 'Filter by namespace.', defaultsTo: '*', ) ..addFlag('pretty', abbr: 'p', help: 'Pretty print matching results.'); void printUsage() { stdout.writeln('Usage: xml_grep [options] {files}'); stdout.writeln(); stdout.writeln(argumentParser.usage); exit(1); } void main(List arguments) { final files = []; final results = argumentParser.parse(arguments); final tag = results['tag'] as String; final namespace = results['namespace'] as String; final pretty = results['pretty'] as bool; for (final argument in results.rest) { final file = File(argument); if (file.existsSync()) { files.add(file); } else { stderr.writeln('File not found: $file'); exit(2); } } if (files.isEmpty) { printUsage(); } for (final file in files) { final document = XmlDocument.parse(file.readAsStringSync()); final elements = document.findAllElements(tag, namespace: namespace); for (final element in elements) { stdout.writeln(element.toXmlString(pretty: pretty)); } } }