我正在研究使用微软XslCompiledTransform
的替代品,一切似乎都指向Saxon,其次是XQSharp。当我开始查看Saxon的文档时,我发现XQuery可以完全相当于我的XSLT,这些XSLT并不像XQuery的标记那样简洁。
XSLT比XQuery有什么优势可以获得更详细的语法?
是否可以创建模板功能?
答案 0 :(得分:5)
一般来说,有很多重叠;两者都植根于底层的XPath实现。至于是否使用XSLT或XQuery,证据就在布丁中:XSLT在转换方面更胜一筹,而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上的教程;如果使用得当,它们都是非常强大的技术。