You can try rpm2cpio in conjunction to cpio. The command rpm2cpio extract the rpm to a cpio archive and write it to the standard output. You can pipe the output of rpm2cpio to the cpio command to actually write/save the files. For example:
rpm2cpio package-x.x-x.noarch.rpm | cpio -dimv
this will preserve the structure inside the rpm package, that is it will create all the directories specified in the paths, but relative to the current directory. For example if a file is meant to be installed in /usr/share, you will find it under $PWD/usr/share. See man cpio for future reference.