I've seen this twice now on older XP machines (sadly, some of my users DO have to run XP) so I figured I should document it, if only because the fix is so non-intuitive.
By default, XPS documents open in IE with a helper called XPSViewer.exe. You can also open them in a separate standalone viewer by installing the Microsoft XPS Essentials thing
http://www.microsoft.com/en-us/download/details.aspx?id=11816
But that doesn't work in IE, and my users needed it to.
Sometimes, users report that when they open an XPS file, the browser hangs. Checking task manager shows that XPSViewer.exe is taking up 50% of CPU cycles. Ending the process allows IE to respond, but the document is not displayed.
The first hint at a solution was from:
http://discussions.citrix.com/topic/273861-cannot-open-xps-files/
"This issue occurs because the non-administrator user account cannot access the %WINDIR%\System32 folder. By default, WPF writes the output file to the %WINDIR%\System32 folder. The %WINDIR%\System32 folder requires administrator permissions. When the non-administrator account tries to access this folder, the WPF caching code is triggered. This code causes the screen to flicker.
In 32-bit versions of the Windows Server 2003 operating system, the output file is D3d9caps.dat. In 64-bit versions of the Windows Server 2003 operating system, the output file is D3d9caps64.dat. "
It got me thinking that maybe i could modify the rights to the file instead of applying the hotfix...
After doing that the user could open the .xps file successfully!. But after closing the xps (internet explorer uses xpsviewer.exe to display the file) the file d3d9caps.dat disappeared from the system32 folder...
The next time the .xps file was opened by the user, the d3d9caps.dat file was not created in system32 folder as one might expect, but instead in the more appropriate path "...Documents and Settings\username\Local Settings\Application Data" folder.
So in fact, all i had to do to fix this problem was deleting/renaming the d3d9caps.dat file in the system32 folder.
So all you have to do is delete (or for safety, rename) that d3d9caps.dat file and try again! Works a treat!