Here's a command geared specifically to your example:
cat text.html | sed 's@<BODY> @<BODY>\n@' | sed 's@ </BODY>@\n</BODY>@'
To expand on what ortho-orange#42 gave:
cat text.html | sed 's@\(<.\+>\)\(.*\)\(</.\+>\)@\1\n\2\n\3@'
Aside from being extraordinarily cryptic, it is reasonable as long as you don't have nested tags. Basically, it requires something
in the first tag (between the '<' and '>'), allows for nothing between the start and end tag, and also requires something
in the end tag (between '</' and '>'). It is only slightly more flexible than ortho's; the one above will allow any character in the tag (uppercase, lowercase, numbers, punctuation, spaces, etc.). Whether that's a good thing entirely depends on the data you intend to use.