Xml 如何使用“<;xsl:apply template>;`使用XSLT?
我正在进行java代码生成,XSLT中有许多Xml 如何使用“<;xsl:apply template>;`使用XSLT?,xml,xslt,xpath,code-generation,Xml,Xslt,Xpath,Code Generation,我正在进行java代码生成,XSLT中有许多或是不可维护的 字段顺序对消息很重要,我发现生成不同字段的唯一方法是在不同的属性上使用switch case 这是一个示例XML数据: 批量消息 对应的XSL太长,但例如在每个字段上我都使用,因为编码和解码消息缓冲区的顺序很重要。我需要多次使用每个字段 [...] [...] @凌驾 公共字节[]toByteArray(){ ByteBuffer缓冲区=ByteBuffer.allocate(长度); 超级字节数组(缓冲区); 返回buffer.
或
是不可维护的
字段顺序对消息很重要,我发现生成不同字段的唯一方法是在不同的属性上使用switch case
这是一个示例XML数据:
批量消息
对应的XSL太长,但例如在每个字段上我都使用
,因为编码和解码消息缓冲区的顺序很重要。我需要多次使用每个字段
[...]
[...]
@凌驾
公共字节[]toByteArray(){
ByteBuffer缓冲区=ByteBuffer.allocate(长度);
超级字节数组(缓冲区);
返回buffer.array();
}
私有整数=;
私人[]
=新的
[];
私有的
我想为每个字段使用不同的元素(字段数组、字段保留、字段…),但不遵守顺序
- 这是使用XSL的有效方法吗
- 关于如何使用XSLT生成代码,您有什么建议吗
注意:我现在仍然可以更改XML的格式。创建更专门的模板。将模板中的条件语句中的条件上移到模板的匹配条件中 注意:多个模板可能与一个元素匹配。如果它们在匹配标准中具有相同的特异性水平,那么它们将获得相同的计算优先级。您可能必须在模板上指定
@priority
,以便“打破僵局”并控制应该触发哪一个。在本例中,我将priority=“1”
添加到字段[array]
的模板中,以确保它与字段[not(@reserved)]的模板匹配
例如:
<!--
*****************************************************************
** Generate a private field declaration
for fields that have array elements.
**************************************************************-->
<xsl:template match="field[array]" priority="1" mode="generateField">
private int <xsl:value-of select="array/@sizeName"/><xsl:text> = </xsl:text><xsl:value-of select="array/@size"/>;
private <xsl:value-of select="@type"/><xsl:text>[] </xsl:text><xsl:value-of select="@name"/>
<xsl:text> = new </xsl:text><xsl:value-of select="@type"/>
<xsl:text>[</xsl:text><xsl:value-of select="array/@sizeName"/><xsl:text>];</xsl:text>
</xsl:template>
<!--
*****************************************************************
** Generate a private field declaration
for fields that do not have the attribute reserved.
**************************************************************-->
<xsl:template match="field[not(@reserved)]" mode="generateField">
private <xsl:value-of select="@type"/><xsl:text> </xsl:text><xsl:value-of select="@name"/>;
</xsl:template>
私有整数=;
私人[]
=新的
[];
私有的
它还可以提高性能,因为匹配条件有机会通过XSLT处理器进行优化。我已经尝试过这一点,但它只考虑没有保留属性的字段……如果您想要一个处理具有保留属性的字段的模板,然后在上面创建一个模板匹配:
我的意思是模板匹配字段[array]
与任何内容都不匹配。啊,现在我明白了。问题是,多个模板可能与这些标准相匹配(即,一个字段
,它没有@保留
,并且具有数组
子元素)。它们具有相同的特异性水平,因此它们具有相同的优先级,最后一个“获胜”。通过指定@优先级
,您可以打破僵局。我会更新我的答案。