Как преобразовать XML в псевдокод или код Java

У меня есть файл 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;
    }
}

person Vladimir    schedule 27.02.2018    source источник


Ответы (1)


Довольно легко с 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="'&#xa0;', (1 to $indent)!' '" separator=""/>
</xsl:function>
person Michael Kay    schedule 28.02.2018