为什么我会选择XSLT或XQuery来生成html文档?

时间:2009-12-15 14:41:47

标签: c# xslt xquery saxon

我正在研究使用微软XslCompiledTransform的替代品,一切似乎都指向Saxon,其次是XQSharp。当我开始查看Saxon的文档时,我发现XQuery可以完全相当于我的XSLT,这些XSLT并不像XQuery的标记那样简洁。

XSLT比XQuery有什么优势可以获得更详细的语法?

是否可以创建模板功能?

4 个答案:

答案 0 :(得分:5)

一般来说,有很多重叠;两者都植根于底层的XPath实现。至于是否使用XSLT或XQuery,证据就在布丁中:XSLT在转换方面更胜一筹,而XQuery在查询方面更胜一筹。

所以,使用XQuery:

  • 更小,更简单的事情
  • 高度结构化的数据(XQuery非常强类型,容易抱怨)
  • 数据库中的数据
  • 提取一小段信息

相反,使用XSLT:

  • 仅使用增量更改复制文档
  • 更大,更复杂的事情
  • 松散(或严重)结构化数据

答案 1 :(得分:2)

XSLT旨在获取一个 xml文档并将其转换为其他内容,例如csv,html或不同的xml格式,例如XHTML。

XQuery旨在从一个或多个 xml文档中提取信息,并将结果合并到一个新的xml文档中。

XQuery和XSLT都严重依赖XPath。如果您的输出基于一个输入xml文档和**一个输出xml文档,那么两者几乎可以互换。

XQuery的FLWR语法非常直观,如果你有一个SQL背景,IMO XSLT在处理一个输入/一个输出情况时是更强大的语言,特别是如果输出不是xml。

我个人认为基于xml的语法和XSLT的声明性质稍微难以阅读和维护。

它真的归结为选择,尽管使用XQuery进行“简单”格式化有点不寻常。如果您的输入基于多个xml文档,那么您几乎坚持使用XQuery,如果您的输出不是基于xml的,那么您几乎不会使用XSLT。

答案 2 :(得分:2)

离开XslCompiledTransform的最大原因是它只是一个XSLT 1.0处理器。

XSLT 2.0和XQuery 1.0的大部分功能都重叠,并且大多数情况下它们是具有不同语法的类似语言(有点像C#和VB)。

XSLT更冗长,但其模板功能增加了许多功能,这些功能在XQuery中复制相当麻烦,特别是对节点树进行小的更改。 XQuery中特别繁琐的主要功能包括<xsl:template match="..." /><xsl:copy>...</xsl:copy>

XQuery有一个更清晰的语法(恕我直言),只要不需要模板功能,我发现它更适合更高级的计算,并从大型文档中检索数据。

XQuery通常被视为数据库语言。虽然很多数据库都以这种方式使用它,但它并不是唯一的用途。数据库中某些语言的实现非常有限。另一位评论家声称XQuery是“非常强烈的打字”。除非您使用静态类型功能,否则XQuery的输入强度不会超过XSLT。虽然一些数据库实现迫使您使用静态类型化功能,但大多数其他实现正在远离此。

他还声称XQuery不适合“更大,更复杂的东西”。我认为恰恰相反。语法的简洁和风格使得在XQuery中编写复杂的函数和计算变得更加容易。我在XQuery中写了一个raytracer,感觉非常自然;我认为在XSLT中编写计算复杂的东西要困难得多(当然更冗长)。

总结:

XSLT更适合转型。如果您的文档具有大致正确的结构并且您想要转换组件,例如渲染XML文件的HTML版本,则会更好。

XQuery对于从各种来源构建新的XML文档或更改文档结构更为自然。

请注意,重叠相当大,通常没有“正确”选择,但如果你做出了错误的选择,那么你往往会发现自己正在反对这种情况。

答案 3 :(得分:1)

XSLT和XQuery做了两件不同的事情。顾名思义,XSLT用于将数据从一种形式转换为另一种形式(例如从XML转换为HTML)。另一方面,XQuery是一种用于从XML文档中查找和提取某些XML节点的语言,然后可以将其用于任何目的。

XSLT实际上依赖于XQuery的功能,看看www.w3schools.com上的教程;如果使用得当,它们都是非常强大的技术。