No, you did not miss anything. The eclipse documentation clearly says, that the build step is executed anyway, regardless of the result of the pre-build step. That is exactly what happens.
See: http://help.eclipse.org/luna/topic/org.eclipse.cdt.doc.user/reference/cdt_u_prop_build_settings_steps.htm?cp=5_4_7_0_3_3_1
A solution for you might be to put a file named "makefile.defs" in a project directory and add rules to it that trigger the python script. If the script fails, this will stop the build process. I tried something similar and it worked, but to find the correct rule was not so easy. As a result, I recommend to write your own makefiles and do not have eclipse generate them. That gives you maximum flexibility over the whole build process. A compromise could be to write an additional script that calls your script for checking the XML-files and then the makefiles that eclipse has generated.
By the way: Forget python. Use Ruby instead.