代码之家  ›  专栏  ›  技术社区  ›  Jon W

XSLT映射算法

  •  2
  • Jon W  · 技术社区  · 17 年前

    有没有一种方法可以很容易地以人类可读的格式绘制出巨大的XSLT的确切功能?即,所有可能的输入->;所有可能的输出。我们无法创建一个包罗万象的输入文档,因为适配器对不同的输入有不同的行为(我们估计需要100多个输入文档才能覆盖所有可能的输出)

    4 回复  |  直到 17 年前
        1
  •  1
  •   jro    17 年前

    分解它——将xsl执行语句移动到文档中的xsl模板中。通过这样做,您将自上而下更合理地理解文档。

        2
  •  1
  •   AnthonyWJones    17 年前

    如果是跳过下一句话,否则为否:-

    如果是跳过下一句话,否则为否:-

    既然这两个问题的答案都是肯定的,那么就放弃XSLT,构建一些你能理解的东西。你知道输入是什么,你知道你想要什么输出,经典的冯·纽曼(现在他们还在教这个吗?)。

        3
  •  1
  •   Dimitre Novatchev    17 年前

    一般来说,对于任何编程语言来说,这都是不可能完成的任务!

    the halting problem .

    因此,你可能会付出巨大的努力去做一些被证明是不可能的事情。

        4
  •  0
  •   dirkgently    17 年前

    这很可能对你没有帮助。但我会分享我的经验。

    就在昨天,当我试图弄清楚XSLT规范对解析的要求时,我遇到了同样的问题。为了帮助自己,我在原始xsl中添加了几个函数(xsl:template的,是迂腐的)。

    我创建了以下内容:

    <xsl:template name="print">
    <xsl:param name="message"/>
    <xsl:param name="elem"/>
    <div class="ArticleBody">
      <br/>
      <xsl:value-of select="$message"/>: <xsl:value-of select="$elem"/> ... <br/>
    </div>
    

    print 模板是工人,序言和结语只是简单地调用 打印

    <xsl:template match="db:para">
     <xsl:apply-templates/>
    </xsl:template>
    

    <xsl:template match="db:para">
     <xsl:call-template name="prologue">
       <xsl:with-param name="item" select="'para'"/>
     </xsl:call-template>
     <xsl:apply-templates/>
     <xsl:call-template name="epilogue">
      <xsl:with-param name="item" select="'para'"/>
     </xsl:call-template>
    

    现在,当每个节点都被处理时,我会得到一个输出:

    start-processing: article ... 
    

    end-processing: article ...
    

    推荐文章