I must have stared at
<usage_minimum>01</usage_minimum>
<usage_maximum>12</usage_maximum>
<report_count>12</report_count>
a dozen (decimal; i.e, 0x0c) times before realizing, from looking at the C code equivalent, that it is broken. Does it really make sense for usage elements to be represented in hexadecimal in XML? If so, could they be written as 0x12 or 12h to make it clear to human readers that the values are hexadecimal? Or could there be a comment noting that fact?
For that matter, when reading XML, could numbers be self-describing? I.e., could 0x0c, 0Ch, and 12 all be considered equivalent representations of the same number? (Perhaps also 0b00001100.)
(I realize that it would be tricky to do this in a fully backwards-compatible way.)