我下面有XML文件。将它转换为某种伪代码的最简单方法是什么? 输入:
<assign:variable>
<name>VAR0</name>
<value>0</value>
</assign:variable>
<assign:variable>
<name>VAR1</name>
<value>0</value>
</assign:variable>
<match:variable name="VAR0" value="1">
<match:variable name="VAR1" value="1">
<assign:variable>
<name>VAR2</name>
<value>0</value>
</assign:variable>
</match:variable>
</match:variable>
期望的输出。
int var0 = 0;
int var1 = 1;
if (var0==1) {
if (var1==1) {
int var2=0;
}
}
答案 0 :(得分:0)
使用XSLT相当容易。这是一个草图。我使用的文本值模板是XSLT 3.0中的一个新功能,但它可以在早期的XSLT版本中轻松完成,它只是更冗长。
<xsl:template match="/">
<xsl:apply-templates>
<xsl:with-param name="indent" select="0"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="assign:variable">
<xsl:param name="indent" as="xs:integer"/>
<xsl:value-of select="f:indent($indent)"/>
<xsl:text>int {lower-case(name)} = {value};</xsl:text>
</xsl:template>
<xsl:template match="match:variable">
<xsl:param name="indent" as="xs:integer"/>
<xsl:value-of select="f:indent($indent)"/>
<xsl:text>if ({lower-case(name)} = {value}) {{</xsl:text>
<xsl:apply-templates>
<xsl:with-param name="indent" select="$indent + 4"/>
</xsl:apply-templates>
<xsl:value-of select="f:indent($indent) || '}'"/>
</xsl:template>
<xsl:function name="f:indent" as="xs:string">
<xsl:param name="indent" as="xs:integer"/>
<xsl:value-of select="' ', (1 to $indent)!' '" separator=""/>
</xsl:function>