使用XSLT生成Java代码的有趣问题

使用XSLT生成Java代码的有趣问题,java,xml,xslt,code-generation,Java,Xml,Xslt,Code Generation,我正在编写代码生成XSL,遇到了一个棘手的问题,需要一些专家帮助 XML定义消息传递对象及其成员。下面是其中一个消息对象的小示例,需要将其转换为适合序列化的Java对象: <message name="MyObject"> <comment>Some comment</comment> <field name="a" type="byte"/> <field name="b" type="Int32"/> <fie

我正在编写代码生成XSL,遇到了一个棘手的问题,需要一些专家帮助

XML定义消息传递对象及其成员。下面是其中一个消息对象的小示例,需要将其转换为适合序列化的Java对象:

<message name="MyObject">
  <comment>Some comment</comment>
  <field name="a" type="byte"/>
  <field name="b" type="Int32"/>
  <field name="c" type="string"/>
  <field name="foo1" type="byte" numberOfBits="3"/>
  <field name="foo2" type="bool" numberOfBits="1" />
  <field name="foo3" type="bool" numberOfBits="1" />
  <field name="foo4" type="bool" numberOfBits="1" />
  <field name="foo5" type="bool" numberOfBits="1" />
  <field name="foo6" type="bool" numberOfBits="1"/>
  <field name="d" type="Int32"/>
  <field name="e" type="Int32"/>
  <field name="f" type="Int16"/>
  <field name="bar1" type="byte" numberOfBits="4"/>
  <field name="bar2" type="empty" numberOfBits="3"/>
  <field name="bar3" type="bool" numberOfBits="1"/>
</message>
如果有人能给我指点方向,我将不胜感激


Mike

我建议尝试xsl:param和/或xsl:variable和嵌套模板

顶级模板匹配第一个foo并为下一个同级调用嵌套模板,将累积的位偏移量作为xsl:param传递给它

嵌套模板为下一个同级调用自身

当再也找不到foo时,嵌套结束


我认为它应该会起作用。

除非您已经知道转换所需的输出是什么,否则我不知道这与XSLT有什么关系。如果您可以更改XML格式,则可以通过使XML更能反映输出来消除许多问题,即定义一个
标记,以包含要分组到XML中的所有位定义Java中的整数类型(byte、int、long)。
 byte bitset1;


 byte    getFoo1() { return (biteset1 & 0x07); }
 boolean getFoo2() { return (biteset1 & 0x08) == 0x08; }
 boolean getFoo3() { return (biteset1 & 0x10) == 0x10; }
 boolean getFoo4() { return (biteset1 & 0x20) == 0x20; }
 boolean getFoo5() { return (biteset1 & 0x40) == 0x40; }
 boolean getFoo6() { return (biteset1 & 0x80) == 0x80; }