我有一个特定的问题,我不知道如何处理。这里在办公室里有这么大的笨重的XSLT,我们用它来调整一种类型的XML到另一种。问题在于它不是一贯地书写而且很难遵循。在这个样式表的古老创作中,似乎它被完全遗忘了。XSLT映射算法
有没有一种方法能够以一种人类可读的格式轻松映射出巨型XSLT的功能?即每个可能的输入 - >每个可能的输出。由于适配器针对不同的输入具有不同的行为(我们估计需要100多个输入文档来覆盖每个可能的输出),所以我们无法创建全面的输入文档。
任何建议都会受到欢迎。
我有一个特定的问题,我不知道如何处理。这里在办公室里有这么大的笨重的XSLT,我们用它来调整一种类型的XML到另一种。问题在于它不是一贯地书写而且很难遵循。在这个样式表的古老创作中,似乎它被完全遗忘了。XSLT映射算法
有没有一种方法能够以一种人类可读的格式轻松映射出巨型XSLT的功能?即每个可能的输入 - >每个可能的输出。由于适配器针对不同的输入具有不同的行为(我们估计需要100多个输入文档来覆盖每个可能的输出),所以我们无法创建全面的输入文档。
任何建议都会受到欢迎。
分手 - 将xsl执行语句移动到文档中的xsl模板。通过这样做,您可以从上到下更合理地理解文档。
如果它太令人难以置信地巨大以至于无法理解它,这听起来像是你有一个重新决定你的决定:这个文件是如此重要以至于我们需要知道它的作用(并理解它是如何工作 - 因此需要一些重新工作),或者我们可以像现在一样生活吗?
这不会帮助你。但我会分享我的经验。
我只是在昨天才对待XSLT,当时我遇到同样的问题,试图弄清楚XSLT规范是怎么说w.r.t.解析。我做了什么,为了帮助自己,我在原来的XSL中添加了几个函数(xsl:template's,是迂腐的)。 接下来,我通过浏览器运行它,瞧,我清楚地了解了DFS。
我创建了以下内容:
<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
模板是工作人员,序言和结尾只是用自定义字符串调用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>
我现在得到一个输出时,每一个节点进行处理:
而且我把从改变原来的XSL文件
start-processing: article ...
and it when co mpleted
end-processing: article ...
我有点CSS的投掷以及(处理根节点时),只是让事情看起来不错。而那种让我的一天:)
你了解你的输入文件吗?
如果是跳到下一句别的号: -
然后你就不能测试XSLT的任何形成的再因素,因此,你需要使这个问题的答案,是的。
你了解你的输出文件吗?
如果是跳到下一句别的号: -
,那么你不能测试XSLT的任何形成的再因素,因此您需要回答这个quesion,是的。
既然这两个问题的答案都是“是”,那么请关闭XSLT并构建一些可以理解的内容。你知道输入是什么,你知道你想要什么输出,经典的von-newman(他们现在还在教这个吗?)。
我必须同意,我希望这个适配器的设计者能共享更好的文档。 – 2009-02-24 15:58:50
通常这是不可能的任务 - 对于任何编程语言!
这从the halting problem的不可判定性得出。
因此,你可能会付出巨大的努力去尝试做一些被证明是不可能的事情。
我的建议是写自己的解决方案,遵循最佳编程实践,使用单元测试,如果可能的正确性证明。作为函数式语言的XSLT更适合证明正确性。
不是。 XSLT本质上是递归的。 – annakata 2009-02-24 15:45:41
没有乐趣。我想我们真的很想知道:“是否有一种简单的方法可以绘制出一个巨大样式表的所有模板调用?” XSLT不适合这一点。 – 2009-02-24 15:51:43