2

我正在研究使用 Microsoft 的替代方案XslCompiledTransform,一切似乎主要指向 Saxon,其次是 XQSharp。当我开始查看 Saxon 的文档时,我发现 XQuery 可以做与我的 XSLT 相当的工作,而 XSLT 远没有 XQuery 的标记那么简洁。

XSLT 与 XQuery 相比有哪些优势值得拥有更详细的语法?

会是可以创建的模板功能吗?

4

4 回答 4

5

一般来说,有很多重叠。两者都植根于底层 XPath 实现。至于是使用 XSLT 还是 XQuery,证据就在布丁中:XSLT 更擅长转换,而 XQuery 更擅长查询

因此,将 XQuery 用于:

  • 更小、更简单的东西
  • 高度结构化的数据(XQuery 的类型非常强,容易抱怨)
  • 来自数据库的数据
  • 提取一小部分信息

相反,将 XSLT 用于:

  • 复制仅具有增量更改的文档
  • 更大、更复杂的东西
  • 松散(或糟糕)的结构化数据
于 2009-12-15T14:47:37.347 回答
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 卡住。

于 2009-12-15T16:42:29.350 回答
2

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

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

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

只要不需要模板功能,XQuery 就具有更简洁的语法 (IMHO),而且我发现它对于更高级的计算和从大型文档中检索数据要好得多。

XQuery 通常被视为一种数据库语言。虽然很多数据库都以这种方式使用它,但它并不是唯一的用途。数据库中语言的一些实现非常受限。另一位评论者声称 XQuery 是“非常强类型的”。除非您使用静态类型特性,否则 XQuery 的类型并不比 XSLT 强。虽然一些数据库实现强制您使用静态类型功能,但大多数其他实现正在远离这一点。

他还声称 XQuery 对于“更大、更复杂的事情”不是很好。我会提出完全相反的观点。语法的简洁性和风格使得在 XQuery 中编写复杂的函数和计算变得更加容易。我用 XQuery 写了一个光线追踪器,感觉真的很自然;我认为在 XSLT 中编写这种计算复杂的东西会更难(当然更冗长)。

总之:

XSLT 更适合转换。如果您有一个结构大致正确的文档,并且您想要转换组件,例如呈现 XML 文件的 HTML 版本,那就更好了。

XQuery 更自然地用于从各种来源构建新的 XML 文档,或者用于更改文档的结构。

请注意,重叠相当大,并且通常没有“正确”的选择,但如果您做出错误的选择,那么您往往会发现自己的工作与谷物背道而驰。

于 2009-12-15T17:01:12.370 回答
1

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

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

于 2009-12-15T14:49:07.390 回答