Another thing,
dom and jdom parse the entire xml document in memory, so you can go back and forward thru the xml tree and nodes. (dom is a standard defined by W3C, and jdom is similar but defined more "friendly" with java).
xstream also loads the whole xml into memory, but instead of creating a "generix" xml object (a document with childs, nodes, text, etc...) it creates a java class that you must have defined. It's main goal is to serialize java objects into xml documents.
sax doesn't create the entire xml tree structure in memory, so it can be better for large xml files, using less memory. But you cannot process an element once you've read the next one.
dom, jdom, sax, etc... all have their own parser, and you cannot work with a document parsed by one of the them with the other parsers.
JAXP is not a parser, it's a set of classes that can be implemented in other parsers, so if you're using a JAXP supporting parser, you could change to another parser if it also supports JAXP.
JAXB is "similar" to xstream, it doesn't create a "generic" xml document in memory, it creates a specific java object that represents the xml structure. It uses xml schemas to map the elements of the xml document to attributes in the java class.
So once again, it depends on what you need.
I'm not familiar with all this xml stuff, but I think this can give you a starting point based on your needs.