xslt - 在生成的输出中保留缩进

标签 xslt

在使用 XSLT 生成一些代码时,我无法正确对齐缩进。

生成的代码中,您会注意到第一个公共(public)构建器名称...已按预期方式对齐。但该方法的其余部分未正确对齐,然后所有其他方法也未正确对齐。我打算让它们缩进以遵循其余代码的缩进。

如何解决此对齐问题?

不用担心生成代码的正确性,只是想展示一个示例。


XSLT

<?xml version="1.0"?>
<xsl:stylesheet version="2.0"
    xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:fn="http://www.w3.org/2005/xpath-functions">

    <xsl:output method="text" name="text" />
    <xsl:strip-space elements="*" />

    <xsl:template match="..." mode="builder">public Builder <xsl:value-of select="fu:lowercaseFirstLetter(@name)"/>(final String value) {
        this.dao.getMy<xsl:value-of select="fu:capitalizeFirstLetter(../@name)"/>().set<xsl:value-of select="fu:capitalizeFirstLetter(@name)"/>(value);
        return this;
    }
    </xsl:template>

    <xsl:template match... >
        <xsl:result-document href="..." format="text">
public class <xsl:value-of select="..."/> implements Parent {

    public boolean test(Object o) {

        <xsl:apply-templates mode="builder"/>

        return true;

    }

}

        </xsl:result-document>
    </xsl:template>
</xsl:stylesheet>

生成的代码

public class ATest implements Parent {

    public boolean test(Object o) {

        public Builder name(final String value) {
        dao.getMyATest().set_valid(value);
        return this;
    }
    public Builder name(final String value) {
        dao.getMyATest().set_valid(value);
        return this;
    }
    public Builder name(final String value) {
        dao.getMyATest().set_valid(value);
        return this;
    }
    public Builder name(final String value) {
        dao.getMyATest().set_valid(value);
        return this;
    }

        return true;

    }

}

预期结果

public class ATest implements Parent {

    public boolean test(Object o) {

        public Builder name(final String value) {
            dao.getMyATest().set_valid(value);
            return this;
        }
        public Builder name(final String value) {
            dao.getMyATest().set_valid(value);
            return this;
        }
        public Builder name(final String value) {
            dao.getMyATest().set_valid(value);
            return this;
        }
        public Builder name(final String value) {
            dao.getMyATest().set_valid(value);
            return this;
        }

        return true;

    }

}

最佳答案

解决方案 1:不要担心生成的 Java 的缩进,将其通过格式化程序作为后处理阶段。

解决方案 2:特别注意空白的产生。始终使用 xsl:text 将任何文字文本输出(包括空格)括​​起来,以区分要输出的空格和用于使样式表可读的空格。在所有模板规则上都有一个“indent”参数,给出当前的缩进级别,并在调用 apply-templates 时添加 X

<xsl:apply-templates>
  <xsl:with-param name="indent" select="$indent + 2"/>
</xsl:apply-templates>

有一个函数或命名模板来生成缩进空格:

<xsl:call-template name="do-indent">
  <xsl:with-param name="indent" select="$indent + 2"/>
</xsl:call-templates>

关于xslt - 在生成的输出中保留缩进,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15363840/

相关文章:

xslt - 文档中的语法突出显示

xslt - XSL 如果温度 > 20,则删除标签,否则复制标签

xml - 使用 xslt :analyze-string to add acronyms to HTML

xml - 在 HTTP 查询中为 XML 文档指定自定义 XSL 文件

xml - 新手 : XSLT Transformation to validate rules in XML document

java - 如何从 XML 中反序列化 Java 对象?

php - 在现有网页中显示带有 XSL 的 XML 文件

xml - 我可以将 xslt 链接到另一个 xslt 吗?

xslt - 使用 XSLT 处理循环依赖

xslt - XSLT:根据那些值中的1个来选择具有多个@class值的元素