通过XAML的漫长学习循环之后,我回到了HTML和javascript,并意识到声明性代码的概念-就转换规则而言-是一个令人难以置信的强大概念。
尽管XSLT缺少语法,但XML的XSLT处理仍然是声明性转换编程的基础。然而,我总是发现很难理解如何将XSLT用于日常任务(通过XML)。
除了生成HTML之外,还有哪些很好的XSLT示例可以优雅地解决编程问题?
我猜它很擅长图形转换和数据再处理。
编辑:我希望有一些实际的例子--让我对xslt完全反感的一件事就是代码的视觉复杂性。
发布于 2009-03-29 01:41:45
XSLT经常可以找到漂亮的代码示例,特别是当XSLT用作函数式编程语言时。
有关示例,请参阅上的 -- XSLT2.0的函数式编程库。
作为一种FP语言,XSLT也是一种。这意味着,在其他事情中,一个人声明,指定现有的关系。
这样的定义通常不需要任何额外的代码就能产生结果--它本身就是它自己的实现,或者是一个可执行定义或可执行规范。
这里是一个小的示例。
此XPath 2.0表达式将定义为“一个自然数的最大”:
if(f:isPrime($pNum))
then $pNum
else
for $vEnd in xs:integer(floor(f:sqrt($pNum, 0.1E0))),
$vDiv1 in (2 to $vEnd)[$pNum mod . = 0][1],
$vDiv2 in $pNum idiv $vDiv1
return
max((f:maxPrimeFactor($vDiv1),f:maxPrimeFactor($vDiv2)))如果一个数pNum是素数,那么如果pNum是素数,那么如果vDiv1和vDiv2是pNum,的两个因子,那么pNum的最大素因数就是vDiv1和vDiv2.的最大素因数中较大的一个
我们如何使用它来实际计算XSLT中的最大素因子?我们只是将上面的定义包装在一个<xsl:function>中,并且...获取结果!
<xsl:function name="f:maxPrimeFactor" as="xs:integer">
<xsl:param name="pNum" as="xs:integer"/>
<xsl:sequence select=
"if(f:isPrime($pNum))
then $pNum
else
for $vEnd in xs:integer(floor(f:sqrt($pNum, 0.1E0))),
$vDiv1 in (2 to $vEnd)[$pNum mod . = 0][1],
$vDiv2 in $pNum idiv $vDiv1
return
max((f:maxPrimeFactor($vDiv1),f:maxPrimeFactor($vDiv2)))
"/>
</xsl:function>例如,我们可以使用 :
f:maxPrimeFactor(600851475143) = 6857
至于效率,好吧,这个转换只需要0.109秒。
高效的XSLT代码的其他示例
作为文本语料库(
发布于 2009-03-28 21:55:08
那么代码生成呢?我在protobuf-net中使用它从.proto模型(导出为xml) - like so创建.cs文件。在AFAIK4.0中,T4模板将是一个更明显的选择,但在此之前T4引擎并不是独立的(AFAIK4.0)。
Xslt还被广泛用于不同xml布局之间的转换-例如,在biztalk等中间件工具中。
发布于 2009-03-28 22:09:54
前几天我用过XSLT。我需要提供一种方法,让用户将树控件的内容保存到一个文件中,这样他们就可以通过电子邮件将其发送给他们的老板,向他们的孙子等展示它。
要求他们能够将其保存为具有整洁外观的HTML文件,或者保存为XML,以便他们可以随心所欲地进一步处理它。
因此,我建议输出带有链接到它的XSLT的XML,这样他们就有了原始的XML,但是当他们在浏览器中打开它时看起来很好。
这并不理想(如果他们将HTML移到其他没有XSL的地方,IE根本不会显示它!)但是如果我们改变计划,我可以只修改产品,让用户选择格式,如果他们选择HTML,我所要做的就是在保存之前对XML运行XSLT以获取HTML。
理想情况下,有一种方法可以制作包含XML和XSLT的自包含HTML文件,但我不知道有哪种方法……这本身就是一个问题。
https://stackoverflow.com/questions/693596
复制相似问题