I worked on this problem a little bit. Unfortunately, it's not really a matter of simple "parsing" - the DVD menu is really a program with an entire virtual machine (IMO overly confusing and complicated).
You basically have to implement the VM, which may lead to legal problems (?)
But, VLC does this (via libdvdnav and libdvdread), so I'm not sure why more don't.