Two usual things to check
1) That you are using the right ROM. Xdelta checks input. A lot of the things people use xdelta on (mainly things IPS struggles with, like the later GBA, DS, PSP and their contemporaries) also have trimmed versions floating around in the wild (indeed they seem to be more resistant to automated searches so might even be more common in some places). In the case of the DS there are also an awful lot of pointless redumps out there that change a byte in the header nobody cares about and will never care about (one of the older dumpers skipped it, with the introduction of the DSi anti flash cart protections then said previously unused area contained a hash no emulator author, ROM botherer, flash cart marker or flash cart user will ever care about but the older dumper continued to be used as it was solid and then came a spate of "redumps", typically from a group called Pussycat).
Trimming you can probably undo easily enough (pad it out with either 00 or FF to make something match the hash, ROMs should be on the standard power of 2 sizes)
Redumps is harder but you can probably force it through in some versions.
Also make sure you have on inadvertently got a v1.1 and it was made for v1.0 or something. Patches were not a thing back on those consoles but even many tiny games got rereleases with a version bump.
2) That you are using the right version of xdelta.
There are two main forks
i)
https://www.evanjones.ca/software/xdelta-win32.html is an older version but was used fairly extensively in earlier ROMs as the main project had stalled.
ii)
http://xdelta.org/ The main project came back.