I have a script that is close to what you want, but it lease the newlines in the output. I think the special characters will cause a problem when I post the script: the slanted smiley faces are equals signs.
This is all one line:
cat ~/input.txt|sed -e s'/\(<tag[0-9]>\)\([^<]*\)<\/tag[0-9]>/\2|/g' -e s'/ \{1,30\}//g' -e s'/<tag[0-9]>\([^<]*\)<AltError[ ]*Code=\([^ ]*\)[ ]*Description=\([^ ]*\)/\1|Code
1|Description
2/g' -e s'/<ARS>//g'
Some notes:
1) the 'cat' program just prints the file
2) a block in a sed command that is found using a string that is surrounded with \( and \) can later be displayed using \1 (or \2 if it is the second occurrence).
3) the code that says \([^ ]*\) means to find a bunch of characters until you reac a space (the carret means "NOT" and it is follwed by a space).
4) I added the strings: "Code:" and "Description:" to the output
5) tag[0-9] finds the string "tag" followed by a number from 0 to 9. Add a star after this if there are more digits.