find .//. -name \*.xml -type f -exec head -n1 {} + |
sed -ne:n -e'\|^==> \.//\.|!{H;$!d' -e\} \
-ex -e'\|\.xml <==\n|!{G;x;d' -e\} \
-e's|[^/]*//\(.*\) <==\n[^<]*$|\1|p'
head lists filenames all on its own. So you can just -exec it and have sed watch its input for head's report on the names for those files which don't match a < in their first line.
If you just want to avoid listing filenames for files whose first character is < that is as easily done. In fact, with a GNU grep it can be easier...
find .//. -name \*.xml -type f -exec grep -EHaom1 '^.?' {} +|
sed -ne'\|^\.//\.|!{H;$!d' -e\} \
-e'x;\|\.xml:|!{G;x;d' -e\} \
-e's|:[^<]*$||p;$!d;x;s|||p'
We shouldn't directly test for the < char with grep because we might end up testing the third or fourth line if the first begins with a <, but what we can do is tell grep to stop at 1 -match for -only 0 or 1 char at the head of a line. This means grep will print our filenames like...
.//./path/to/xml.xml:.
And so all sed must do is ensure it gathers the entire filename (in case it contains newline characters) and then to test if the last character in the string is < if it is not, sed strips the last two chars and prints the results.