Skip to content

Instantly share code, notes, and snippets.

@oloftus
Created December 1, 2016 11:53
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save oloftus/fa407de1fcd0c7d58e13232bab01a799 to your computer and use it in GitHub Desktop.
Save oloftus/fa407de1fcd0c7d58e13232bab01a799 to your computer and use it in GitHub Desktop.
#!/usr/bin/perl
use strict;
use warnings;
open my $fh, "<", $ARGV[0] or die "Couldn't open file";
my $tagStack = [];
my $typeStack = [];
my $en = 0;
my $tag;
for my $ln (<$fh>) {
if ($ln =~ /^(\s*)<(.*?) .*?xsi:type="(.+?)".*?(\/?)>/) {
my $space = $1;
my $tag = $2;
my $type = $3;
my $open = $4 ne "/";
if ($open) {
$en += 1;
}
if ($en > 0 && $open) {
push $tagStack, $tag;
push $typeStack, $type;
}
$ln =~ s/(xsi:type=".+?"|xmlns:xsi=".+?")//gx;
my $lnNoXsi = $_ || $ln;
my @bits = split(" ", $lnNoXsi);
print $space, "<", $type, " ", join(" ", @bits[1..$#bits]), "\n";
}
elsif ($en > 0 && ($tag = $tagStack->[-1]) && $ln =~ /^(\s*)<\/$tag>/) {
pop $tagStack;
my $space = $1;
my $type = pop $typeStack;
print $space, "</", $type, ">", "\n";
$en -= 1;
}
else {
print $ln;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment